我有一个使用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错误。奇怪。
为了完整性我正在使用
答案 0 :(得分:3)
好的,我接受了@BillyChan的建议并开始深入挖掘代码。在兔子踪迹之后,事实证明另一个插件正在处理助手。单页应用程序(我没有设计)使用名为require-handlebars-plugin的插件将把手集成到require中。
这个插件对Backbone.Marionette一无所知所以它使用require实现了自己的registerHelper约定,你猜对了,希望帮助器以特定的格式存在于... / templates / helpers / xxx.js中。这解释了为什么我收到我的文件404,或者即使文件在那里它的格式也不正确。
再次感谢评论,但我错误的是因为我正在查看错误的文档。之前我没有使用过帮助器,所以我认为我的设置不正确,这是我的设置,但不是我所看到的Handlebars和Backbone.Marionette文档建议的方式。我现在更聪明了。