我正在尝试指定在运行时为compositView项目视图呈现的模板。
如果有的话可以发布一个例子 itemViewOptions无法正常工作
10倍
答案 0 :(得分:3)
我认为你需要的函数是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;
},
});
如果您需要根据选项值对模板进行额外设置,您仍然可以使用ItemView的getTemplate函数。 因为我根本不知道你的代码是我能提供的最好的例子。
希望这有帮助。
答案 1 :(得分:1)
我做的另一种方法是将模板选择器作为itemViewOptions中的项之一传递。
MyCompositeViewInstance = new MyCompositeView(
{collection: col,
itemViewOptions: { template:"#myTemplate"});
在itemView的initialize()中,模板的默认值可以这样改变:
if(options.template) {
this.template = options.template;
}
现在,视图通过覆盖在ItemView中指定为默认值的初始值来渲染使用新模板。