我在我的应用程序中使用handlebars
所有模板及其相应的helper
函数在.html
文件本身中编写。我的Backbone
视图中发生了模板编译,这意味着它在.js
文件中发生。
在实施require.js
之前,我的所有视图实例都是全局的,这就是为什么模板编译工作正常但现在我使用require.js
将我的视图代码重新分解为模块因为我的模板模板编译时异常(Missing helper: 'setIndex'
)即将到来时不起作用。这就是我写的方式
的index.html:
//loading library
<script type="text/javascript" src="lib/js/handlebars-v1.1.2.js"></script>
//helper function
<script>
Handlebars.registerHelper('setIndex', function(value){this.index = Number(value);});
</script>
//template
<script id="ftpBodyInitialTpl" type="text/x-handlebars-template">
{{#each bizSteps}}
{{setIndex @index}}
{{/each}}
</script>
.js文件:
define(["handlebars"],function(Handlebars){
//templates compilation happening here.
});
我不知道,为什么它显示Missing helper: 'setIndex'
任何人都可以帮助我。
感谢。
答案 0 :(得分:0)
看起来您正在加载没有RequireJS的Handlebars:
<script type="text/javascript" src="lib/js/handlebars-v1.1.2.js"></script>
然后使用RequireJS:
define(["handlebars"],function(Handlebars){
您没有提到模块加载错误消息,所以我假设您正确配置了RequireJS来加载它,并且RequireJS确实加载了它。问题是你最终得到了两个Handlebars实例。没有RequireJS加载的那个获得了setIndex
帮助器。装有RequireJS的那个没有。这个问题有多种解决方案:
加载没有RequireJS的把手,避免也用RequireJS加载它。在这种情况下,您只需使用Handlebars导出的全局Handlebars
符号。您没有在模块所需的模块中列出handlebars
。
使用RequireJS加载把手,避免加载没有RequireJS的把手。您必须删除加载Handlebars的script
标记,并且帮助程序必须成为AMD模块。
在RequireJS中加载没有RequireJS和假加载把手的把手。您可以保持现在的代码。您可以像这样配置RequireJS:
路径:{ 把手:“path / to / handlebars-fake.js” }
handlebars-fake.js
文件将是:
define(function () {
return Handlebars;
});
因此,RequireJS最终将使用与script
加载的Handlebars相同的实例。