我正在尝试使用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
});
答案 0 :(得分:1)
parse
方法。
在您的情况下,该模型已经是该集合的一部分。因此,当您在现有模型上设置数据时,不会调用该解析,因为它不是模型的主干set
方法实现的一部分。
您需要在模型上明确地调用它。