看一看Backbone-Relational或supermodel.js。
這些項目提供了比默認實現更好的模型嵌套形式。
我們只是窩骨幹車型,如:
var MyModel = Backbone.Model.extend({});
var MySubModel = Backbone.Model.extend({});
var model = new MyModel({submodel: new MySubModel({color: 'blue'})});
而且我們覆蓋了toJSON
方法:
// nested models! Might just override the internal representation of this...
_.extend(Backbone.Model.prototype, {
// Version of toJSON that traverses nested models
toJSON: function() {
var obj = _.clone(this.attributes);
_.each(_.keys(obj), function(key) {
if(!_.isUndefined(obj[key]) && !_.isNull(obj[key]) && _.isFunction(obj[key].toJSON)) {
obj[key] = obj[key].toJSON();
}
});
return obj;
}
});
_.extend(Backbone.Collection.prototype, {
// Version of toJSON that traverses nested models
toJSON: function() {
return this.map(function(model){ return model.toJSON(); });
}
});
所以JSON表示看起來是正確的,我們鳥巢模型時。您必須注意模型上的parse
方法,但是當您從服務器取回JSON時,您必須生成所有子模型和集合,以便它們都能正常工作。
是的,那第一個'toJSON'方法可能會寫得更好'if(key instanceof Backbone.Model)'或某種程度上...... – tkone
謝謝..如果我們檢索整個樹爲json從一個請求中的服務器..我們如何去一步去實例化它? – hacklikecrack