我有一个 Web 应用程序,使用 backbone.marionettehandlebars 模板,通过扩展 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。
  • 最佳答案

    好的,我接受了@BillyChan 的建议并开始深入研究代码。跟踪兔子的踪迹,结果发现另一个插件正在处理助手。我没有设计的单页应用程序使用名为 require-handlebars-plugin 的插件将 Handlebars 集成到 require 中。

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

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

    关于templates - 在backbone.marionette.handlebars 中使用Handlebars 助手,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20688175/

    10-12 04:14