2013-06-24 76 views

回答

3

我認爲你需要的功能是getTemplate,這裏,你確定你需要決定在要使用的模板行爲運行時,在你的ItemView中定義它。

MyView = Backbone.Marionette.ItemView.extend({ 
    getTemplate: function(){ 
    if (this.model.get("foo")){ 
     return "#some-template"; 
    } else { 
     return "#a-different-template"; 
    } 
    } 
}); 

這是鏈接到文檔。 https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#viewtemplatehelpers

編輯

我創建了一個JS小提琴,這僅僅是如何選擇從複合視圖傳遞給ItemView控件的例子。 http://jsfiddle.net/rayweb_on/bCkUe/

var SampleCompositeView = Backbone.Marionette.CompositeView.extend({ 
    template : "#compositeViewTemplate", 
    templatetoUseinItemView : '#sample-template2', 
    itemView : SampleView, 
    buildItemView: function(item, ItemViewType, itemViewOptions){ 
     var options = _.extend({model: item}, itemViewOptions); 
     options.templatetoUseinItemView = this.templatetoUseinItemView; 
     var view = new ItemViewType(options); 
     return view; 
    }, 
}); 

如果你需要做的gE的額外設置基於您選擇的模板珍惜你仍然可以使用ItemView控件的是getTemplate功能。 因爲我不知道你的代碼是最好的例子,我可以提供。

希望這會有所幫助。

+0

謝謝,但它並沒有幫助我,我實際上需要將動態參數傳遞給itemViewOptions對象,但顯然我做了itemViewOptions:{param:function(){return「string」})},不會工作 – danikoren

+1

你嘗試過buildItemView函數嗎?此工作爲複合材料和collectionView的牽線木偶。你可以看看這裏https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-builditemview –

+0

在該功能,你可以將選項傳遞給itemView –

1

另一種解決方法是將模板選擇器作爲itemViewOptions中的一個項目傳遞。

MyCompositeViewInstance = new MyCompositeView(
         {collection: col, 
          itemViewOptions: { template:"#myTemplate"}); 

在ItemView控件的initialize(),模板的默認值可以被改變,像這樣:

if(options.template) { 
this.template = options.template; 
} 

的視圖現在呈現使用新的模板通過重寫指定爲默認在ItemView控件的初始值。

+0

這應該是被接受的答案。值得注意的是,對於'CompositeView'來說,設置的散列鍵是'childViewOptions'。 – gpasci

相關問題