Ich habe folgendes Dialogmodell:Wie kann das hierarchische Modell beim Ändern aktualisiert werden?
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());
}
});
Wie Sie oben aus dem Code sehen können, ich speichern user
Modell in DialogModel
und stellen Daten auf parse
und Serialisierung in toJSON
.
Als irgendwann bekomme ich dialog:update
Socket-Nachricht mit den folgenden Daten:
{
id: 1,
message: 'message',
user: {
<JSON USER DATA>
}
}
Dialog auf dieser Nachrichtendaten ich folgendes tun zu aktualisieren basiert:
eventBus.on('dialog:update', function (json) {
dialogModel.set(json);
});
Aber das Problem ist, Das user
Modell wird nicht aktualisiert Becase parse
Methode wird nicht ausgeführt.
Also meine Frage ist, wie könnte ich user
Modell auf set
Methode aktualisieren?
['parse()' wird nicht von 'set()'] aufgerufen (https://github.com/jashkenas/backbone/blob/master/backbone.js#L464). Sie sollten es manuell aufrufen oder 'DialogModel' selbst anhören (innerhalb' initialize'), um 'change' zu ändern und 'user' dann zu aktualisieren. Meiner Meinung nach sollten Sie dieses UserModel lieber auf einen "Controller" verschieben und beide Modelle separat füttern. –
Warum sollte 'UserModel' auf einen Controller verschoben werden? Ich baue ein hierarchisches Modell wie Backbone suggeriert http://backbonejs.org/#Model-constructor – Erik