我有一个集合,我可以成功地做到这一点('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
}
所以我的另一个问题是:那个神秘的物体"某物"是什么?它只是一个空的对象…?
您可以在一般更改事件中使用几个选项:
- 骨干。model# hasChanged:这将允许您查看在此更改事件的上下文中是否更改了模型属性。如果是,你可以获得它的新值,并根据需要将其应用到视图(或任何其他上下文)。
- 骨干。model# changedAttributes:这将允许您获得自上次
set()
调用以来所有更改的属性。当不带参数调用时,它是changed
哈希的防御性克隆副本;你也可以传入参数的散列,并且只获得相对于该键/值对集的模型的不同之处。 - 骨干。Model#previous:这将允许您在更改事件期间获得模型属性的先前值。
- 骨干。model# previousAttributes:这将允许您在更改事件期间获得模型的所有先前值。如果你想的话,你可以使用这个来完全撤销一个更改(通过调用
set
和这个函数的结果)。
顺便说一下,change:attr
事件的第三个参数(以及change
的第二个参数)是一个选项对象,如果您想要指定事件处理程序可以读取的自定义值,它可能很有用。Backbone还将专门处理一些标准选项。请参阅Backbone的文档。Model#set获取有关特定选项的更多信息,并查看Backbone事件列表,以查看触发这些事件时期望的回调签名。