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