2013-09-08 3 views
3

Возможно ли иметь составной вид в марионетке с РАЗЛИЧНЫМИ видами элементов внутри? Например:Магистраль Магистраль различных композитных видов

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); 
    } 

});

В принципе, в зависимости от модели в коллекции, я хочу создать определенный вид.

+0

Лучше переопределить getItemView вместо buildItemView, см. Второй (непринятый) ответ. – Nick

ответ

5

Вы можете сделать это с помощью метода 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 
     } 
    } 
}); 

Здесь элемент означает модель в коллекции. Надеюсь, это поможет.

1

Вы хотите, чтобы переопределить метод 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); 
}