渲染时将变量传递到 Handlebars 模板 Marionette/Backbone 查看
Passing variables into Handlebars template when rendering Marionette/Backbone View
我在 Backbone 和 Marionette 上使用 Handlebars。我正在编译我的 Handlebars 模板并将它们存储在一个可以被视图定义引用的对象中。我正在使用 LayoutView 和区域在 UI.
中显示我需要的各种项目
我想要做的是将(布尔)变量传递到视图中,以便 Handlebars 将决定(通过块助手 {{#if varName}}
)渲染什么。为了清楚起见,我不想保留这些数据,所以我真的不想让它们成为我要渲染的模型的一部分。
所以我正在做的是正常定义 Backbone.Model 和 Marionette.ItemView,并尝试通过初始化传递其他变量:
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
,但我没有取得任何进展。我做错了什么?
当我想这样做时,我重写了 serializeData 方法。您也可以通过覆盖模型中的 toJSON 方法来实现,但是正如您提到的那样,当您保留模型时它会被发送到服务器。由于这些是计算属性而不是持久属性,所以我不喜欢将它们发送到服务器。示例如下:
var newUser = new app.UserView({
model: new app.UserModel(),
serializeData: function() {
return _.extend({
isNewDoc: true
}, this.model.toJSON());
}
});
@Tyler Marien,我对此进行了测试,也许它适用于香草 Backbone.View,但对于 Marionette.ItemView 它没有 :(
但是你的建议让我开始研究 Marionette.ItemView 上的方法 serializeData
然后序列化数据的想法很普遍,这反过来又让我回到了 Marionette文档。我可能首先应该更仔细地阅读它:)
好消息是 View.templateHelpers 似乎完全符合我的要求 - 查看 http://marionettejs.com/docs/marionette.view.html#viewtemplatehelpers - View.mergeOptions 似乎也适用。我的要点:记住 RTFM。
我在 Backbone 和 Marionette 上使用 Handlebars。我正在编译我的 Handlebars 模板并将它们存储在一个可以被视图定义引用的对象中。我正在使用 LayoutView 和区域在 UI.
中显示我需要的各种项目我想要做的是将(布尔)变量传递到视图中,以便 Handlebars 将决定(通过块助手 {{#if varName}}
)渲染什么。为了清楚起见,我不想保留这些数据,所以我真的不想让它们成为我要渲染的模型的一部分。
所以我正在做的是正常定义 Backbone.Model 和 Marionette.ItemView,并尝试通过初始化传递其他变量:
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
,但我没有取得任何进展。我做错了什么?
当我想这样做时,我重写了 serializeData 方法。您也可以通过覆盖模型中的 toJSON 方法来实现,但是正如您提到的那样,当您保留模型时它会被发送到服务器。由于这些是计算属性而不是持久属性,所以我不喜欢将它们发送到服务器。示例如下:
var newUser = new app.UserView({
model: new app.UserModel(),
serializeData: function() {
return _.extend({
isNewDoc: true
}, this.model.toJSON());
}
});
@Tyler Marien,我对此进行了测试,也许它适用于香草 Backbone.View,但对于 Marionette.ItemView 它没有 :(
但是你的建议让我开始研究 Marionette.ItemView 上的方法 serializeData
然后序列化数据的想法很普遍,这反过来又让我回到了 Marionette文档。我可能首先应该更仔细地阅读它:)
好消息是 View.templateHelpers 似乎完全符合我的要求 - 查看 http://marionettejs.com/docs/marionette.view.html#viewtemplatehelpers - View.mergeOptions 似乎也适用。我的要点:记住 RTFM。