我是Backbone的新手。
是否可以在骨干网中定义一个包含相同类型的模型列表的模型?例:
MyModel = Backbone.Model.extend({
initialize: function() {
nestedMyModels:new Array();
},
addMyModel: function(aModel) {
// Code here would push() aModel onto array
},
render: function() {
// Loop through array calling render() recursively
}
});
然后,我将有一个View,该View启动了对render()的递归调用。例:
MyView = Backbone.View.extend({
render:function() {
this.model.render();
}
});
最佳答案
1没有数组,但有集合
总是在Backbone中以Array
的Models
来思考。
现在,您要做的是实现MyModels的Collection并将其一个实例保留在MyModel实例中。
// code simplified and not tested
MyModel = Backbone.Model.extend({
initialize: function() {
this.nestedMyModels: new MyModels();
},
addMyModel: function( model ) {
this.nestedMyModels.add( model );
}
});
MyModels = Backbone.Collection.extend({
model: MyModel
});
2使用Views进行渲染
总是在
Collection
中思考。推荐的方式是,如果您有一个
render
和View
更好的是每个都有一个Collection
。这样,集合的视图将在迭代中调用模型的视图:// code simplified and not tested
MyModelView = Backbone.View.extend({
render: function(){
this.$el.html( model.get("name") );
var view = new MyModelsView({ collection: this.model.nestedMyModels });
this.$el.append( view.render.el );
return this;
}
});
MyModelsView = Backbone.View.extend({
render: function(){
this.collection.each( function( model ){
var view = new MyModelView({ model: model });
this.$el.append( view.render.el );
});
return this;
}
});