我有以下对话框模型:
var DialogModel = Backbone.Model.extend({
user: null,
constructor: function () {
// Initialize user model
this.user = new BW.user.UserModel();
Backbone.Model.apply(this, arguments);
},
parse: function (attributes) {
_.isObject(attributes) || (attributes = {});
// update user's model data
this.user.set(attributes.user);
delete attributes.user;
return attributes;
},
toJSON: fucntion () {
var json = Backbone.Model.prototype.toJSON.call(this);
// serialize user's model data to JSON
_.extend(json, user: this.model.toJSON());
}
});
从上面的代码中可以看出,我将user
模型存储到DialogModel
并在parse
上设置数据并在toJSON
中序列化。
在某些时间点,我得到dialog:update
套接字消息,其中包含以下数据:
{
id: 1,
message: 'message',
user: {
<JSON USER DATA>
}
}
要根据此消息数据更新对话框,请执行以下操作:
eventBus.on('dialog:update', function (json) {
dialogModel.set(json);
});
但问题是user
模型没有得到更新,因为parse
方法不会执行。
所以我的问题是如何在user
方法上更新set
模型?
答案 0 :(得分:0)
一种选择是覆盖model.set。在DialogModel
中添加以下内容即可:
set: function (attributes, options) {
this.parse(attributes);
Backbone.Model.prototype.set.apply(this, arguments);
},
请注意,我选择调用parse
方法,因为它很好地设置了用户数据并将其从我们的属性中删除(从而阻止在dialogModel
上设置数据)。