É possível ter uma exibição composta em marionete com DIFERENTES visualizações de itens dentro? Por exemplo:
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);
}
});
Basicamente, dependendo do modelo na coleção, quero criar uma certa exibição.
Respostas:
5 para resposta № 1Você pode fazer isso com o método 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
}
}
});
Aqui item significa o modelo na coleção. Espero que isto ajude.
1 para resposta № 2
Você deseja substituir o buildItemView
método:
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);
}