2

我正在使用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;  
        }
    }

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

4

1 回答 1

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 帖子。

于 2012-06-26T14:49:03.790 回答