2

我处于以下情况。

collection.length = 0我想传递一个参数以listTemplate显示消息时listTemplate(不存在模型!)。我怎样才能实现我的目标?

这是我的代码。

var ListView = Marionette.CompositeView.extend({
    template: listTemplate,
    // some code
});

var itemView = Marionette.ItemView.extend({
    // some code
});

--

app.mainColumn.show(new ListView({
    collection: tasks,
    vent: myApp.vent
}));
4

2 回答 2

7

我想你可以重新定义serializeData方法。

var ListView = Marionette.CompositeView.extend({
  模板:列表模板,
  序列化数据:函数(){
    viewData = { foo: 'foo' };
    if(this.collection.length == 0) viewData.bar = 'bar';
    返回视图数据;
  }
});

所以在模板中,this.bar可用(仅当集合为空时)。

于 2012-07-04T08:39:15.383 回答
3

您可以以编程方式设置要使用的模板并跳过传入变量。例如:

getTemplate: function(){
    if (this.collection.length == 0){
        return "#no-models-are-present-template";
    } else {
        return "#regular-template";
    }
}

来源:https ://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#change-which-template-is-rendered-for-a-view

或者,您可以设置一个空视图
https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-emptyview
或使用模板助手https://github.com/ marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#object-or-function-as-templatehelpers
来实现相同的结果。

鉴于它是一个空集合,我会使用一个带有匹配模板的空视图。

于 2013-08-11T20:08:52.447 回答