Javascript 在发生变化时更新层次模型的正确方法是什么?
我有以下对话框模型:Javascript 在发生变化时更新层次模型的正确方法是什么?,javascript,backbone.js,Javascript,Backbone.js,我有以下对话框模型: 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 (att
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
中序列化
作为某个时间点,我将获得对话框:使用以下数据更新套接字消息:
{
id: 1,
message: 'message',
user: {
<JSON USER DATA>
}
}
但问题是,user
模型没有得到更新,因为parse
方法没有执行
因此,我的问题是如何更新set
方法上的user
模型?一个选项是覆盖。向对话框模型
中添加类似于以下内容的内容即可:
set: function (attributes, options) {
this.parse(attributes);
Backbone.Model.prototype.set.apply(this, arguments);
},
请注意,我选择调用parse
方法,因为它可以很好地设置用户数据并将其从属性中删除(从而防止在dialogModel
上设置该数据)
.。您应该手动调用它,或者收听对话框model
本身(在初始化
中)打开更改
并更新用户
。在我看来,您应该将此用户模型移出(到“控制器”)并分别为两个模型提供数据。为什么要将UserModel
移出控制器?我正在构建层次模型,如主干建议
set: function (attributes, options) {
this.parse(attributes);
Backbone.Model.prototype.set.apply(this, arguments);
},