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

});

基本上,根据集合中的模型,我想创建一个特定的视图。

4

2 回答 2

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

这里的 item 表示集合中的模型。希望这可以帮助。

于 2013-10-22T09:13:02.700 回答
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);
}
于 2013-09-08T14:18:08.373 回答