【问题标题】:Using Handlerbars helpers in backbone.marionette.handlebars在backbone.marionette.handlebars 中使用Handlebars 助手
【发布时间】:2013-12-19 17:35:58
【问题描述】:

我有一个使用backbone.marionette 和handlebars 模板的Web 应用程序,模板通过扩展backbone.marionette.handlebars 提供。这运行良好,但我现在想添加一些 templateHelpers 来帮助格式化,但我似乎无法让它工作。

我以我认为正确的方式包含了模板助手(见下文),但我从 require.js 得到错误,说它“GET .../templates/helpers/foo.js 404 (NotFound)”为一旦backbone.marionette 应用程序启动。

我的模板看起来像这样(更新:感谢 Billy Chan)

<div>{{{foo myData}}}</div>

我已经尝试了两件事。首先在我的 Marionette.ItemView 中定义一个简单的助手:

...
return Marionette.ItemView.extend({
    template: template,
    templateHelpers: {
        foo: function (someData) { return 'foo and ' + someData; }
    },
...

这不起作用,即我仍然收到第一段中给出的 require.js 错误。 (注意:我确实尝试过不使用函数参数,以防出现问题但没有解决)。

我做的第二件事是添加一个简单的文件 .../templates/helpers/foo.js ,其中定义了一个 require.js 定义返回一个对象,其中包含一个函数 foo 。这给出了与以前相同的错误,即丢失文件。那可能是因为我需要将此文件定义为依赖项。我更喜欢第一种不需要外部文件的方法,但如果这是正确的方法,我很乐意使用这种方法。

最后,我在backbone.marionette.handlebars github 上注意到this issue。这表明 templateHelpers 工作,但可能有问题。任何有关在此环境中使用帮助程序的建议将不胜感激。

更新

我做了更多的实验表明,如果我有 {{foo}} 或 {{{foo}}},那么它会调用 Marionette.ItemView.extend 中的 foo 函数,但不会插入 foo 的返回。但是,如果我有 {{foo myData}} 或 {{{foo myData}}} 那么它会给出上面列出的 404 Not found 错误。奇怪。

为了完整性,我正在使用

  • 主干 1.0.0
  • backbone.marionette 1.0.4
  • backbone.marionette.handlebars 0.2.0.

【问题讨论】:

    标签: templates backbone.js marionette handlebars.js


    【解决方案1】:

    好的,我接受了@BillyChan 的建议并开始深入研究代码。在兔子追踪之后,事实证明另一个插件正在处理助手。我没有设计的单页应用程序使用一个名为 require-handlebars-plugin 的插件将把手集成到 require 中。

    这个插件对 Backbone.Marionette 一无所知,因此它使用 require 实现了自己的 registerHelper 约定,您猜对了,它期望帮助程序以特定格式位于 .../templates/helpers/xxx.js 中。这解释了为什么我得到我的文件 404,或者即使文件在那里,它的格式也不正确。

    再次感谢 cmets,但我看错了文档。我以前没有使用过助手,所以我认为我设置的不正确,我有,但不是按照我正在查看的 Handlebars 和 Backbone.Marionette 文档所建议的方式。我现在更聪明了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      相关资源
      最近更新 更多