在收集事件中为 Backbone 语法而苦苦挣扎
Struggling for Backbone syntax in collection events
我有一个集合,我可以做到这一点('this'是集合实例):
this.on('change:username', function(model,property,something){
// model is backbone model that changed
// property is the property that changed (username in this case)
// something is some empty mystery object that I can't identify
}
然而我想做的是:
this.on('change', function(model,property,something){
// model is backbone model that changed
// ***how can I read the properties that changed here?***
// something is some empty mystery object that I can't identify
}
问题是,在第二种情况下,我无法获得更改的 属性...也许那是因为它可能会同时进行多个 属性 更改。
如何捕获在第二种情况下发生变化的属性?这可能吗?
我知道如何做到这一点的唯一方法是
this.on('change', function(model, something){
// something object is unidentifiable
var changed = model.changed; //hash of changed attributes
}
所以我的另一个问题是:那个神秘物体是什么 "something"?它只是一个空对象...?
您可以在一般更改事件中使用几个选项:
- Backbone.Model#hasChanged:这将允许您查看在此更改事件的上下文中模型属性是否已更改。如果是这样,您可以获得它的新值并根据需要将其应用于视图(或任何其他上下文)。
- Backbone.Model#changedAttributes:这将允许您获取自上次
set()
调用以来所有更改的属性。当不带参数调用时,它是 changed
散列的防御性克隆副本;您还可以传入参数的哈希值,并仅获取模型相对于那组 key/value 对的不同之处。
- Backbone.Model#previous:这将允许您在更改事件期间获取模型属性的先前值。
- Backbone.Model#previousAttributes:这将允许您在更改事件期间获取模型的所有先前值。如果需要,您可以使用它来完全撤消更改(通过使用此函数的结果调用
set
)。
顺便说一下,change:attr
事件的第三个参数(和 change
的第二个参数)是一个选项对象,如果你想指定自定义值,它会很有用由您的事件处理程序读取。还有一些标准选项 Backbone 会专门处理。请参阅 Backbone.Model#set for more information on the specific options, and take a look at the Backbone event list 的文档以查看触发这些事件时预期的回调签名。
我有一个集合,我可以做到这一点('this'是集合实例):
this.on('change:username', function(model,property,something){
// model is backbone model that changed
// property is the property that changed (username in this case)
// something is some empty mystery object that I can't identify
}
然而我想做的是:
this.on('change', function(model,property,something){
// model is backbone model that changed
// ***how can I read the properties that changed here?***
// something is some empty mystery object that I can't identify
}
问题是,在第二种情况下,我无法获得更改的 属性...也许那是因为它可能会同时进行多个 属性 更改。
如何捕获在第二种情况下发生变化的属性?这可能吗?
我知道如何做到这一点的唯一方法是
this.on('change', function(model, something){
// something object is unidentifiable
var changed = model.changed; //hash of changed attributes
}
所以我的另一个问题是:那个神秘物体是什么 "something"?它只是一个空对象...?
您可以在一般更改事件中使用几个选项:
- Backbone.Model#hasChanged:这将允许您查看在此更改事件的上下文中模型属性是否已更改。如果是这样,您可以获得它的新值并根据需要将其应用于视图(或任何其他上下文)。
- Backbone.Model#changedAttributes:这将允许您获取自上次
set()
调用以来所有更改的属性。当不带参数调用时,它是changed
散列的防御性克隆副本;您还可以传入参数的哈希值,并仅获取模型相对于那组 key/value 对的不同之处。 - Backbone.Model#previous:这将允许您在更改事件期间获取模型属性的先前值。
- Backbone.Model#previousAttributes:这将允许您在更改事件期间获取模型的所有先前值。如果需要,您可以使用它来完全撤消更改(通过使用此函数的结果调用
set
)。
顺便说一下,change:attr
事件的第三个参数(和 change
的第二个参数)是一个选项对象,如果你想指定自定义值,它会很有用由您的事件处理程序读取。还有一些标准选项 Backbone 会专门处理。请参阅 Backbone.Model#set for more information on the specific options, and take a look at the Backbone event list 的文档以查看触发这些事件时预期的回调签名。