0

在这里,我有一个 Backbone.js 模型 - 联系人和一个集合 - 以联系人为模型的联系人。我有两个视图,其中一个使用集合列出所有联系人,第二个使用模型直接显示单个联系人。但是当我直接使用模型时,我可以在与集合一起使用时触发'change'事件,而不会触发'change'事件(甚至模型的'所有'事件)。我是否在这里缺少一些额外的绑定以使其与集合一起使用?

var Contact = Backbone.Model.extend({ 
    defaults: {
        id: 0,
        urlDisplayPicBig: '',
        urlDisplayPicSmall: ''
    },
    initialize: function () {
        this.bind('change', this.doSomething);
    },
    generateUrls: function () { //earlier doSomething()
        ...
    }
    ...
});

var Contacts = Backbone.Collection.extend({ 
    model: Contact,
    ...
});

更新 同时使用集合和单个模型实例时,我必须运行 generateUrls() 以根据模型的“id”更新 urlDisplayPicBig 和 urlDisplayPicSmall。

4

1 回答 1

2

当您fetch对集合执行以下操作时:

集合将重置

用新的模型列表(或属性哈希)替换集合,最后触发单个"reset"事件。[...] 使用不带参数的 reset 作为清空集合的一种方式很有用。

因此fetch,集合上的 a 将删除当前在集合中的所有模型,并用全新的模型实例替换它们。不会发生任何"change"事件,只会有一个"reset"事件。

当您fetch对模型执行 a 时:

"change"如果服务器的状态与当前属性不同,将触发一个事件。

因此调用fetch几乎与手动从服务器加载数据并调用set更改模型相同。


摘要Collection#fetch不触发任何"change"事件,只是一个"reset"事件;Model#fetch如果发生变化,将触发一个"change"事件。


如果您只想在创建新模型实例时添加几个新属性,那么您可以使用Model#parse.

于 2012-05-07T04:40:05.307 回答