1

我正在尝试为 compositView itemview 指定要在运行时呈现的模板。

如果是这样,有人可以发布一个示例 itemViewOptions 将不起作用

10倍

4

2 回答 2

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 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 函数。因为我根本不知道你的代码,所以这是我能提供的最好的例子。

希望这可以帮助。

于 2013-06-24T15:38:16.300 回答
1

我做的另一种方法是将模板选择器作为 itemViewOptions 中的一项传递。

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

在 itemView 的 initialize() 中,模板的默认值可以这样改变:

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

现在,视图通过覆盖在 ItemView 中指定为默认值的初始值,使用新模板呈现。

于 2013-09-20T08:53:55.460 回答