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 に答える