在集合事件中为Backbone语法苦苦挣扎

时间:2015-07-24 23:01:06

标签: javascript backbone.js

我有一个集合,我可以成功完成这个('这个'是集合实例):

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 个答案:

答案 0 :(得分:3)

您可以在一般的更改活动中使用几个选项:

  1. Backbone.Model#hasChanged:这将允许您查看此更改事件的上下文中是否已更改模型属性。如果是这样,您可以获取其新值并根据需要将其应用于视图(或任何其他上下文)。
  2. Backbone.Model#changedAttributes:这将允许您获取自上次Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: Unable to find on disk script scripts.my_script at org.elasticsearch.script.ScriptService.compile(ScriptService.java:269) at org.elasticsearch.script.ScriptService.executable(ScriptService.java:417) at org.elasticsearch.action.update.UpdateHelper.prepare(UpdateHelper.java:194) ... 6 more 电话以来所有已更改的属性。在没有参数的情况下调用时,它是set()哈希的防御性克隆副本;你也可以传入一个参数哈希,只得到相对于那组键/值对的模型的不同。
  3. Backbone.Model#previous:这将允许您在更改事件期间获取模型属性的先前值。
  4. Backbone.Model#previousAttributes:这将允许您在更改事件期间获取模型的所有先前值。如果您愿意,可以使用它来完全撤消更改(通过使用此函数的结果调用changed)。
  5. 顺便说一句,set事件的第三个参数(以及change:attr的第二个参数)是一个选项对象,如果要指定可以读取的自定义值,这个参数可能很有用。你的事件处理程序。 Backbone还将提供一些标准选项。有关特定选项的详细信息,请参阅Backbone.Model#set的文档,并查看Backbone event list以查看触发这些事件时预期的回调签名。