Collections 为什么这会触发;更改“;主干收集上的事件?

Collections 为什么这会触发;更改“;主干收集上的事件?,collections,backbone.js,backbone-events,Collections,Backbone.js,Backbone Events,为什么这会触发主干集合上的“更改”事件 data.json文件: 模型的数据: 将数据添加到模型: 获取: 获取后,我们在控制台中看到“更改” 请帮帮我。我必须使用此事件,但如果数据没有更改,我不希望在“注释”上触发事件。从集合中接收响应。fetch(),主干将遍历响应中的每个模型,并检查它是否已在本地集合中。如果是,那么它将遍历响应模型的每个属性,并检查本地模型是否具有相同的属性,以及该属性是否相等 这一切都很好,但正如您所料,两个数组在JavaScript中并不相等: [] === [] /

为什么这会触发主干集合上的“更改”事件

data.json文件: 模型的数据: 将数据添加到模型: 获取: 获取后,我们在控制台中看到“更改”


请帮帮我。我必须使用此事件,但如果数据没有更改,我不希望在“注释”上触发事件。

集合中接收响应。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