Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干木偶不同的组合视图_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript 主干木偶不同的组合视图

Javascript 主干木偶不同的组合视图,javascript,backbone.js,marionette,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.coll

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

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


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

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

您可以使用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
        }
    }
});
此处项目表示集合中的模型。
希望这有帮助。

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