Backbone.js:获取集合后引发模型更改事件?

时间:2012-06-14 10:01:29

标签: backbone.js

我有一个名称属性的模型,该属性具有在更改属性时要调用的绑定函数:

var Workitem = Backbone.Model.extend({
                                 initialize: function(){
                                 this.bind('change:name', function() {
                                           alert('name');
                                           }
                                           });
                                 },
                                 defaults: {
                                 name: 'Name'
                                 }
                                 });

如果我获取单个模型,则此方法有效,并且在设置属性和获取数据时触发更改事件。

但后来我创建了一个集合,我希望在fetch方法期间将每个获取的模型触发事件到集合中:

var WorkitemList = Backbone.Collection.extend({
                                       model: Workitem,
                                       });

var workitemsList = new WorkitemList();
workitemsList.fetch();

这可能吗?

3 个答案:

答案 0 :(得分:1)

导入完成后,在集合上获取触发器'reset'事件。听听它,然后用模型开火/混乱。

答案 1 :(得分:0)

获取集合会使用服务器响应替换集合中的模型..它不会更新集合中的每个模型,这是您想要的。最简单的修复方法是循环访问集合中的每个模型但是你有多个服务器请求并错过任何新添加的模型..

我认为,对于您想要实现的目标,您需要创建并获取集合的另一个实例,然后将其中的模型与原始集合进行比较并根据需要进行更新..不是真的很漂亮..

答案 2 :(得分:0)

你可以覆盖集合的fetch - 函数来单独调用每个模型的fetch。但那是非常蛮力的。

fetch: function() {
  for (var model: this.models) {
    model.fetch();
  }
}

任何人都有更好的方法来实现这个目标吗?