如果在初始化对话框视图时使用模型属性的对象数组初始化集合。然后,允许用户编辑列表的对话框视图通过调用模型集来更新这些模型值。当单击对话框的确定按钮时,骨干网是否提供了一种方法来获取自创建/初始化集合以来更改的那些模型的列表?
答案 0 :(得分:3)
有各种模型方法看起来很诱人:
但不要被愚弄,这些仅在触发"change"
事件时适用:
所以在事件被触发和处理后它们就没用了。
我认为你必须追踪自己改变了哪些型号。您可以在收集本身上执行此操作,而无需花费太多精力,因为
并且集合可以绑定到自己的事件。例如,您可以在集合中使用以下内容:
Backbone.Collection.extend({
initialize: function() {
this.delta = { };
this.on('change', this._a_model_has_changed);
},
changed_models: function() {
return _.chain(this.delta).values();
},
_a_model_has_changed: function(m) {
this.delta[m.id] = m;
}
});
然后,您可以通过调用collection.changed_models()
来获取已更改的模型。您还希望监听其他事件,以便在删除模型或与服务器同步时更新this.delta;以上只是为了说明。如果您不想返回Underscore对象,则可以使用此代码:
changed_models: function() {
return _(this.delta).values();
}
但能够collection.changed_models().each(function() { ... })
方便。
演示:http://jsfiddle.net/ambiguous/8PQh9/
您还可以让模型通过模型上的类似设置跟踪自己的肮脏。然后你可以做这样的事情:
collection.filter(function(m) { return m.is_dirty() });
当然,如果模型已经更改,is_dirty
将返回true。