如何设置和解析集合中已存在的Backbone模型

时间:2016-09-02 13:48:33

标签: javascript backbone.js

我正在尝试使用set更新集合中的Backbone模型,我也想parse这个模型,所以属性与其他模型匹配,但我没有成功。谁能解释我做错了什么?当我在设置模型时将parse:true作为选项传递时,它不会被调用吗?

是否直接调用解析然后设置模型?

JS

    var data = {
    "request": "12345678",
    "success": true,
    "orders": [{
        "n": "Joe",
        "v": 123,
        "id": 1
    }, {
        "n": "Jane",
        "v": 456,
        "id": 2
    }]
};

var Order = Backbone.Model.extend({

    parse: function(response) {
        console.log('Model parse before', response);

        response.name = response.n;
        response.value = response.v;

        delete response.n;
        delete response.v;

        console.log('Model parse after', response);

        return response;
    }
});

var Orders = Backbone.Collection.extend({
    model: Order,

    initialize: function() {
        this.listenTo(this, 'update', function(model) {
            console.log('Model update', model);
        });

        setTimeout(function() {
            this.updateModel(2);
        }.bind(this), 1000);

        this.listenTo(this, 'change', function(model, options) {
            console.log(model, options);
        });
    },

    updateModel: function(id) {
        console.log('updateModel');

        var modelToUpdate = this.findWhere({
            id: id
        });

        console.log('modelToUpdate', modelToUpdate);

        modelToUpdate.set({
            "n": "Jane",
            "v": 985,
            "id": 2
        }, {
            parse: true
        });
    },

    parse: function(response) {
        console.log('Collection parse', response.orders);
        return response.orders;
    }
});

var orders = new Orders(data, {
    parse: true
});

JS小提琴:http://jsfiddle.net/kyllle/9hfk5g6q/

1 个答案:

答案 0 :(得分:1)

只有在集合中创建模型时才会调用

parse方法。

在您的情况下,该模型已经是该集合的一部分。因此,当您在现有模型上设置数据时,不会调用该解析,因为它不是模型的主干set方法实现的一部分。

您需要在模型上明确地调用它。