2012-06-26 48 views
2

我正在使用backbone.marionette並希望對傳遞給CompositeView的集合中的某些項目使用不同的視圖。這可能嗎?如何將特定itemView分配給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

,這是不直接支持的權利,但不會太硬增加對項目的需求

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

+0

嗨德里克,我已經添加了這個問題。我正在使用異步木偶,解決這個問題並不像你所說的那麼簡單。 我已經設法通過在覈心文件中的幾個位置更改代碼來獲取某些模型的不同模板。由於異步性質,集合的初始順序被改變,它不應該改變。 現在它並不重要,但我希望你能實現它。 我會添加另一個問題,我發現了一些解決方案。 保持良好的工作! –

相關問題