我正在尝试为 compositView itemview 指定要在运行时呈现的模板。
如果是这样,有人可以发布一个示例 itemViewOptions 将不起作用
10倍
我正在尝试为 compositView itemview 指定要在运行时呈现的模板。
如果是这样,有人可以发布一个示例 itemViewOptions 将不起作用
10倍
我认为你需要的函数是 getTemplate,在这里你定义你需要决定在运行时使用哪个模板的行为,在你的 ItemView 中定义它。
MyView = Backbone.Marionette.ItemView.extend({
getTemplate: function(){
if (this.model.get("foo")){
return "#some-template";
} else {
return "#a-different-template";
}
}
});
编辑
我创建了一个 JS fiddle,这只是一个如何将选项从复合视图传递给 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 函数。因为我根本不知道你的代码,所以这是我能提供的最好的例子。
希望这可以帮助。
我做的另一种方法是将模板选择器作为 itemViewOptions 中的一项传递。
MyCompositeViewInstance = new MyCompositeView(
{collection: col,
itemViewOptions: { template:"#myTemplate"});
在 itemView 的 initialize() 中,模板的默认值可以这样改变:
if(options.template) {
this.template = options.template;
}
现在,视图通过覆盖在 ItemView 中指定为默认值的初始值,使用新模板呈现。