集合 – 为什么这会触发Backbone Collection上的“更改”事件?

为什么这会触发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将此视为差异并触发更改事件.

点赞