我想指定一個模板,以在運行時爲compositView itemview呈現。我可以在運行時指定一個compositview的itemview模板嗎?
如果這樣能有一個人張貼的例子 的itemViewOptions不會工作
10X
我想指定一個模板,以在運行時爲compositView itemview呈現。我可以在運行時指定一個compositview的itemview模板嗎?
如果這樣能有一個人張貼的例子 的itemViewOptions不會工作
10X
我認爲你需要的功能是getTemplate,這裏,你確定你需要決定在要使用的模板行爲運行時,在你的ItemView中定義它。
MyView = Backbone.Marionette.ItemView.extend({
getTemplate: function(){
if (this.model.get("foo")){
return "#some-template";
} else {
return "#a-different-template";
}
}
});
編輯
我創建了一個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功能。 因爲我不知道你的代碼是最好的例子,我可以提供。
希望這會有所幫助。
另一種解決方法是將模板選擇器作爲itemViewOptions中的一個項目傳遞。
MyCompositeViewInstance = new MyCompositeView(
{collection: col,
itemViewOptions: { template:"#myTemplate"});
在ItemView控件的initialize(),模板的默認值可以被改變,像這樣:
if(options.template) {
this.template = options.template;
}
的視圖現在呈現使用新的模板通過重寫指定爲默認在ItemView控件的初始值。
這應該是被接受的答案。值得注意的是,對於'CompositeView'來說,設置的散列鍵是'childViewOptions'。 – gpasci
謝謝,但它並沒有幫助我,我實際上需要將動態參數傳遞給itemViewOptions對象,但顯然我做了itemViewOptions:{param:function(){return「string」})},不會工作 – danikoren
你嘗試過buildItemView函數嗎?此工作爲複合材料和collectionView的牽線木偶。你可以看看這裏https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-builditemview –
在該功能,你可以將選項傳遞給itemView –