Collections 为什么这会触发;更改“;主干收集上的事件?
为什么这会触发主干集合上的“更改”事件 data.json文件: 模型的数据: 将数据添加到模型: 获取: 获取后,我们在控制台中看到“更改”Collections 为什么这会触发;更改“;主干收集上的事件?,collections,backbone.js,backbone-events,Collections,Backbone.js,Backbone Events,为什么这会触发主干集合上的“更改”事件 data.json文件: 模型的数据: 将数据添加到模型: 获取: 获取后,我们在控制台中看到“更改” 请帮帮我。我必须使用此事件,但如果数据没有更改,我不希望在“注释”上触发事件。从集合中接收响应。fetch(),主干将遍历响应中的每个模型,并检查它是否已在本地集合中。如果是,那么它将遍历响应模型的每个属性,并检查本地模型是否具有相同的属性,以及该属性是否相等 这一切都很好,但正如您所料,两个数组在JavaScript中并不相等: [] === [] /
请帮帮我。我必须使用此事件,但如果数据没有更改,我不希望在“注释”上触发事件。从
集合中接收响应。fetch()
,主干将遍历响应中的每个模型,并检查它是否已在本地集合中。如果是,那么它将遍历响应模型的每个属性,并检查本地模型是否具有相同的属性,以及该属性是否相等
这一切都很好,但正如您所料,两个数组在JavaScript中并不相等:
[] === [] // false
因此,当主干到达响应的comments
属性时,尽管响应和本地的值看起来相等,但它们并不相等(根据JavaScript)。主干网将此视为一种差异,并触发一个change
事件。类似地,m.get('comments').push(…)
和m.set('comments',m.get('comments')。push(…)
不会触发更改事件,因为数组引用没有更改。作为模型属性的数组很棘手。
data = [
{
id: 1,
name: "Alex",
comments: [
{
id:5
}
]
},
{
id: 2,
name: "Tom",
comments: []
}
]
var Model = Backbone.Model.extend({
initialize: function () {
console.log('init model');
}
});
var View = Backbone.View.extend({
initialize: function () {
console.log('init view');
}
});
var Collection = Backbone.Collection.extend({
model: Model,
url: "data.json",
initialize: function () {
console.log('init collection');
}
});
var collection = new Collection(data);
collection.on('change', function () {
console.log('change');
})
collection.fetch({
update: true,
merge: true
})
[] === [] // false