如果我在初始化对话框视图时使用模型属性的对象数组初始化集合。然后,允许用户编辑列表的对话框视图通过调用模型集来更新这些模型值。当单击对话框的确定按钮时,主干是否提供了一种方法来获取自集合创建/初始化以来更改的模型列表?
问问题
873 次
1 回答
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。
于 2012-04-19T03:13:40.837 回答