Javascript 主干木偶不同的组合视图
是否可能在木偶中有一个包含不同项目视图的复合视图?例如:Javascript 主干木偶不同的组合视图,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,是否可能在木偶中有一个包含不同项目视图的复合视图?例如: var myCompositeView = Backbone.Marionette.CompositeView.extend({ template: Handlebars.compile(myTemplate), itemView: myView, // I want different views, not just myView initialize: function(){ this.coll
var myCompositeView = Backbone.Marionette.CompositeView.extend({
template: Handlebars.compile(myTemplate),
itemView: myView, // I want different views, not just myView
initialize: function(){
this.collection = this.model.views;
},
appendHtml: function(collectionView, itemView){
collectionView.$('.container').append(itemView.el);
}
}))
基本上,根据集合中的模型,我想创建一个特定的视图。您需要覆盖
buildItemView
方法:
buildItemView: function(item, ItemViewType, itemViewOptions){
var options = _.extend({model: item}, itemViewOptions);
build a custom view
if (item instanceOf ModelA) {
return new ItemViewA(options);
}
// else as needed
// default view
return new ItemViewType(options);
}
您可以使用getItemView方法完成此操作:
var VTbody = Backbone.Marionette.CompositeView.extend({
template: "#emptyTemplate",
tagName:"tbody",
//itemView:VTr, /*No need to specify item View */
getItemView: function(item){
if(item.get("type")=="details") {
return VTrDetails
} else {
return VTr
}
}
});
此处项目表示集合中的模型。
希望这有帮助。最好覆盖getItemView而不是buildItemView,请参阅第二个(不接受)答案。