【问题标题】:Backbone Marionette different composite viewsBackbone Marionette 不同的复合视图
【发布时间】:2023-03-31 06:15:01
【问题描述】:

是否可以在木偶中拥有一个复合视图,其中包含不同的项目视图?例如:

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

});

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

【问题讨论】:

  • 最好覆盖getItemView而不是buildItemView,见第二个(不接受)答案。

标签: javascript backbone.js marionette


【解决方案1】:

您可以使用 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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多