这里我有一个Backbone.js模型 - 联系人和集合 - 联系人与联系人作为模型。我有两个视图,其中一个我使用集合列出所有联系人,而在第二个模型中直接显示单个联系人。但是当我直接使用模型时,我可以在使用集合时触发“更改”事件“更改”事件(甚至模型的“所有”事件)也不会被触发。我在这里错过了一些额外的绑定以使其与集合一起工作吗?
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()来更新urlDisplayPicBig& urlDisplayPicSmall基于模型的“id”。
答案 0 :(得分:2)
对集合执行fetch
时:
该集合将重置
使用新的模型列表(或属性哈希)替换集合,最后触发单个
"reset"
事件。 [...]使用不带参数的reset非常适合清空集合。
因此,集合上的fetch
将删除当前集合中的所有模型,并将其替换为全新的模型实例。不会发生"change"
个事件,只会发生一个"reset"
个事件。
在模型上执行fetch
时:
如果服务器的状态与当前属性不同,将触发
"change"
事件。
因此,调用fetch
几乎与从服务器手动加载数据并调用set
来更改模型一样。
摘要:Collection#fetch
不会触发任何"change"
个事件,只会触发"reset"
个事件;如果发生变化,Model#fetch
会触发"change"
事件。
如果您只想在创建新模型实例时添加一些新属性,则可以使用Model#parse
向传入的JSON添加新属性。