如何将特定itemView分配给CompositeView集合中的特定模型?

时间:2012-06-26 13:00:49

标签: marionette

我正在使用backbone.marionette,并希望对传递给CompositeView的集合中的某些项使用不同的视图。这可能吗?

var vText = Backbone.Marionette.ItemView.extend({
    template : "forms/form-element",
    className : "control-group"
});

var vCheckbox = Backbone.Marionette.ItemView.extend({
    template : "forms/form-element-checkbox",
    className : "control-group"
});

var vForm = Backbone.Marionette.CompositeView.extend({
    tagName : 'form',
    template : 'forms/form',
    className : 'crud-form form-horizontal',
    itemView : // use different view for specific items based on collection modelData
})

我试过了:

itemView : function(model) {

        switch(model.get('inputType')) {
            case "checkbox":
                return vCheckbox;
            break;
            default:
                return vText;
            break;  
        }
    }

但是不起作用。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

目前尚不直接支持,但为您的项目需求添加不会太难

https://github.com/derickbailey/backbone.marionette/blob/master/src/backbone.marionette.collectionview.js#L105-115

这是检索视图的itemView设置值的函数。您可以在特定视图中覆盖它:


Backbone.Marionette.CompositeView.extend({

  // ...

  getItemView: function(){
    return this.itemView();
  }

});

这似乎也应该直接添加到木偶中。你能在github问题列表中添加一个问题吗? https://github.com/derickbailey/backbone.marionette/issues从故障单链接回此SO帖子。