渲染时将变量传递到 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。