为什么这会触发Backbone Collection上的“更改”事件?
data.json文件:
[
{
"id": 1,
"name": "Alex",
"comments": [
{
"id":5
}
]
},
{
"id": 2,
"name": "Tom",
"comments": []
}
]
模型数据:
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
})
获取后,我们在控制台中看到“更改”.
请帮我.我必须使用这个事件,但如果数据没有改变,我不希望在“评论”上触发事件.
最佳答案 收到来自collection.fetch()的响应后,Backbone会遍历响应中的每个模型,并检查它是否已存在于本地集合中.如果是这样,那么它将遍历响应模型的每个属性,并检查本地模型是否具有相同的属性以及它是否相等.
这一切都很好,但是,正如您可能预期的那样,两个数组在JavaScript中不会相同:
[] === [] // false
因此,当Backbone到达响应的comments属性时,虽然响应中的值和本地看起来相等,但它们不相等(根据JavaScript). Backbone将此视为差异并触发更改事件.