は、私は次のようなダイアログのモデルがあります:あなたは上記のコードから見ることができるように変更時に階層モデルを更新する適切な方法は何ですか?
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());
}
});
を、私はDialogModel
にuser
モデルを格納し、parse
にデータを設定し、toJSON
にシリアライズ。私は次の操作を行い、このメッセージデータに基づいてダイアログを更新するには
{
id: 1,
message: 'message',
user: {
<JSON USER DATA>
}
}
:いくつかのポイントとして
時に、私は次のようなデータを持つdialog:update
ソケットメッセージを取得
eventBus.on('dialog:update', function (json) {
dialogModel.set(json);
});
しかし、問題はありますそのuser
モデルは更新されません。parse
メソッドは実行されません。
だから私の質問はどのように私はset
方法にuser
モデルを更新できますか?
[ '解析()' '(設定によって呼び出されていない)'](https://github.com/jashkenas/backbone/blob/master/backbone.js#L464)。手動で呼び出すか、 'DialogModel'自体(' initialize'の中で)を 'change'で聞き、' user'を更新してください。私の意見では、このUserModelを(コントローラに)移動して、両方のモデルを別々にフィードしてください。 –
'UserModel'をコントローラに移動するのはなぜですか?バックボーンのような階層的なモデルを構築しています。http://backbonejs.org/#Model-constructor – Erik