Backbone Marionette不同的复合视图

时间:2013-09-08 14:02:56

标签: 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.collection = this.model.views;
    },
    appendHtml: function(collectionView, itemView){
        collectionView.$('.container').append(itemView.el);
    }

});

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

2 个答案:

答案 0 :(得分: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 :(得分: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);
}