代码之家  ›  专栏  ›  技术社区  ›  Vic

主干Marionette不同的复合视图

  •  3
  • Vic  · 技术社区  · 13 年前

    有可能在提线木偶中有一个复合视图,里面有不同的项目视图吗?例如:

    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 回复  |  直到 13 年前
        1
  •  5
  •   Konza    13 年前

    您可以使用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表示集合中的模型。 希望这能有所帮助。

        2
  •  1
  •   Chris Camaratta    13 年前

    您将要覆盖 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);
    }