我使用带有Backbone和Marionette的Handlebars。我正在编译我的Handlebars模板并将它们存储在一个可以被视图定义引用的对象中。我使用LayoutView和区域在UI中显示我需要的各种项目。
我想要做的是将(布尔)变量传递到视图中,以便Handlebars将做出关于渲染内容的决定(通过块帮助器{{#if varName}}
)。为了清楚起见,我不想保留这些数据,所以我真的不想让它们成为我传入的模型的一部分。
所以我正在做的是正常定义Backbone.Model和Marionette.ItemView,并尝试通过initialize传递其他变量:
var newUser = new app.UserView({
model: new app.UserModel(),
initialize: function(){
this.isNewDoc = true
}
});
// display the view in a region using app.regions.maun.show(newUser);
// ...etc.
我想要的是能够传递并能够在Handlebars模板中引用isNewDoc
等变量,理想情况是通过{{#if isNewDoc}}...{{/if}}
。
我尝试了this.isNewDoc = true
行isNewDoc: true
的各种排列,但我没有到达任何地方。我做错了什么?
答案 0 :(得分:3)
我想要执行此操作时覆盖serializeData方法。您也可以通过覆盖模型中的toJSON方法来实现,但正如您所提到的那样,当您持久化模型时,它将被发送到服务器。由于这些是计算属性而不是持久属性,因此我不喜欢将它们发送到服务器。一个例子如下:
var newUser = new app.UserView({
model: new app.UserModel(),
serializeData: function() {
return _.extend({
isNewDoc: true
}, this.model.toJSON());
}
});
答案 1 :(得分:0)
但是你的建议让我开始研究Marionette.ItemView上的方法,称为serializeData
,然后序列化数据的想法是通用的,这反过来又让我回到了Marionette文档。我可能应该首先仔细阅读:)
好消息是View.templateHelpers似乎完全符合我的要求 - 查看http://marionettejs.com/docs/marionette.view.html#viewtemplatehelpers - 而且View.mergeOptions似乎也适用。我的关键点:记得RTFM。