车把辅助功能不起作用

时间:2014-09-12 06:57:31

标签: javascript requirejs require-handlebars

我在我的应用程序中使用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'任何人都可以帮助我。

感谢。

1 个答案:

答案 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的那个没有。这个问题有多种解决方案:

  1. 加载没有RequireJS的把手,避免也用RequireJS加载它。在这种情况下,您只需使用Handlebars导出的全局Handlebars符号。您没有在模块所需的模块中列出handlebars

  2. 使用RequireJS加载把手,避免加载没有RequireJS的把手。您必须删除加载Handlebars的script标记,并且帮助程序必须成为AMD模块。

  3. 在RequireJS中加载没有RequireJS和加载把手的把手。您可以保持现在的代码。您可以像这样配置RequireJS:

    路径:{     把手:“​​path / to / handlebars-fake.js” }

  4. handlebars-fake.js文件将是:

    define(function () {
        return Handlebars;
    });
    

    因此,RequireJS最终将使用与script加载的Handlebars相同的实例。

相关问题