Marionette.Composite查看如何在不使用任何模型的情况下将参数传递给模板

时间:2012-07-04 08:14:36

标签: backbone.js marionette

我遇到以下情况。

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
}));

2 个答案:

答案 0 :(得分:7)

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

var ListView = Marionette.CompositeView.extend({
  template: listTemplate,
  serializeData: function(){
    viewData = { foo: 'foo' };
    if(this.collection.length == 0) viewData.bar = 'bar';
    return viewData;
  }
});

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

答案 1 :(得分: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
达到同样的效果。

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