我遇到以下情况。
当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
}));
答案 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.collectionview.md#collectionviews-emptyview)
或使用模板助手https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#object-or-function-as-templatehelpers
达到同样的效果。
鉴于它是一个空集合,我会使用一个带有匹配模板的空视图。