在backbone.marionette.handlebars中使用Handlebars助手

时间:2013-12-19 17:35:58

标签: templates backbone.js marionette handlebars.js

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

我已经在我认为正确的方式中包含了模板助手(见下文)但是我从require.js得到并且错误地说它“GET ... / templates / helpers / foo.js 404(NotFound)”as在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。这表明templateHelper有效,但可能有问题。任何关于在这种环境中使用助手的建议都将非常受欢迎。

更新

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

为了完整性我正在使用

  • backbone 1.0.0
  • backbone.marionette 1.0.4
  • backbone.marionette.handlebars 0.2.0。

1 个答案:

答案 0 :(得分:3)

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

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

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