Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在发生变化时更新层次模型的正确方法是什么?_Javascript_Backbone.js - Fatal编程技术网

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);
},