在集合事件中为主干语法而挣扎

Struggling for Backbone syntax in collection events

本文关键字:语法 挣扎 集合 事件      更新时间:2023-09-26

我有一个集合,我可以成功地做到这一点('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
    }

所以我的另一个问题是:那个神秘的物体"某物"是什么?它只是一个空的对象…?

您可以在一般更改事件中使用几个选项:

  1. 骨干。model# hasChanged:这将允许您查看在此更改事件的上下文中是否更改了模型属性。如果是,你可以获得它的新值,并根据需要将其应用到视图(或任何其他上下文)。
  2. 骨干。model# changedAttributes:这将允许您获得自上次set()调用以来所有更改的属性。当不带参数调用时,它是changed哈希的防御性克隆副本;你也可以传入参数的散列,并且只获得相对于该键/值对集的模型的不同之处。
  3. 骨干。Model#previous:这将允许您在更改事件期间获得模型属性的先前值。
  4. 骨干。model# previousAttributes:这将允许您在更改事件期间获得模型的所有先前值。如果你想的话,你可以使用这个来完全撤销一个更改(通过调用set和这个函数的结果)。

顺便说一下,change:attr事件的第三个参数(以及change的第二个参数)是一个选项对象,如果您想要指定事件处理程序可以读取的自定义值,它可能很有用。Backbone还将专门处理一些标准选项。请参阅Backbone的文档。Model#set获取有关特定选项的更多信息,并查看Backbone事件列表,以查看触发这些事件时期望的回调签名。