javascript - Handlebars 辅助功能不起作用

标签 javascript requirejs require-handlebars

我在我的应用程序中使用handlebars,所有模板及其相应的helper函数都写入.html文件本身。模板编译发生在我的 Backbone View 中,这意味着它发生在 .js 文件中。

在实现 require.js 之前,我所有的 View 实例都是全局的,这就是为什么模板编译工作正常,但现在我使用 require.js 将我的 View 代码重构为模块> 因此,当模板编译时异常(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.
});

我不知道,为什么它显示缺少助手:'setIndex'任何人都可以帮助我。

谢谢。

最佳答案

看起来您正在加载 Handlebars 而没有 RequireJS:

<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 的情况下加载 Handlebars,并避免也使用 RequireJS 加载它。在这种情况下,您只需使用 Handlebars 导出的全局 Handlebars 符号即可。您没有在您的模块所需的模块中列出 Handlebars

  2. 使用 RequireJS 加载 Handlebars,并避免在不使用 RequireJS 的情况下加载 Handlebars。您必须删除加载 Handlebars 的 script 标记,并且帮助程序必须成为 AMD 模块。

  3. 在没有 RequireJS 的情况下加载 Handlebars 以及在 RequireJS 中加载 Handlebars。您可以保持代码不变。您可以像这样配置 RequireJS:

    路径:{ Handlebars :“path/to/handlebars-fake.js” }

handlebars-fake.js 文件将是:

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

因此,RequireJS 最终会得到与加载 script 相同的 Handlebars 实例。

关于javascript - Handlebars 辅助功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802502/

相关文章:

javascript - 停止 hbs 上显示错误的 Webstorm! require.js 的插件

javascript - 使用空字符串、null 或 undefined 调用的号码

javascript - 需要视频在按键时静音/取消静音(无按钮)

javascript - json api get请求错误

javascript - 如何将 Requirejs-handlebars 与 Grunt-contrib-requirejs 优化器一起使用?

javascript - 如何在 Symfony2 项目中将 webshim 与 assetic 一起使用?

css - 通过r.js优化require.js/backbone app css文件是否包含cdn @imports

backbone.js - 带有backbone.js 和requirejs 包的Web 应用程序,requirejs 优化器

javascript - RequireJS 与 Dojo 1.7 AMD