javascript - 自定义 Handlebars 助手在没有参数的情况下无法解析

标签 javascript backbone.js requirejs handlebars.js

我正在创建一个 Handlebars 助手,其形式如下:

define(['Handlebars'], function (Handlebars) {
    Handlebars.registerHelper("myHelper", function (options) {
        console.log('myHelper');
        if (*condition*) {
            console.log('myHelper False');
            return options.inverse(this);
        } else {
            console.log('myHelper True');
            return options.fn(this);
        }
    });
});

如您所见,我正在使用 require.js。我还将其用作 Backbone.js 应用程序的一部分。在模板中,助手的调用方式如下:

{{#myHelper}}
<!-- Some HTML -->
{{else}}
<!-- Some HTML -->
{{/myHelper}}

但是,帮助程序总是返回 false,因为它无法被识别。我知道这一点是因为 console.log 从未被调用。我的应用程序中有其他可以工作的自定义助手,但它们都接受参数。如果我添加一个虚拟参数,则帮助器可以正常工作:

define(['Handlebars'], function (Handlebars) {
    Handlebars.registerHelper("myHelper", function (dummy, options) {
        console.log('myHelper');
        if (*condition*) {
            console.log('myHelper False');
            return options.inverse(this);
        } else {
            console.log('myHelper True');
            return options.fn(this);
        }
    });
});

模板:

{{#myHelper "string"}}
<!-- Some HTML -->
{{else}}
<!-- Some HTML -->
{{/myHelper}}

我使用的是 Handlebars v1.0.0。这是 2.0.0 中解决的问题吗?这不是阻碍,但如果可能的话,我显然不希望使用虚拟参数。

最佳答案

这里是fiddle与您需要的帮助者一起。使用了handlebars-1.0.rc.1。还尝试使用handlebars-1.3.0 - 效果很好。

HTML

<script id="topLevel" type="text/x-handlebars-template">
    {{#myHelper}}
        it's truthy
    {{else}}
        it's falsy
    {{/myHelper}}
</script>

JS

Handlebars.registerHelper('myHelper', function (options) {
    if (true) {
        console.log("It's true");
        return options.fn(this);
    }
    console.log("It's false");
    return options.inverse(this);
});

var _template =  Handlebars.compile($('#topLevel').html());
$('body').append(_template());

所以您的问题可能会发生:

过时的库或者您在注册之前尝试使用帮助程序。 Require.js 异步加载库/文件,调用句柄作为依赖项。示例:

define(function(require){
    var yourObj = function() {
      require(['handlebars'], function (Handlebars) {
      // use Handlebars here
      });
    };
    return yourObj;
}); 

希望对你有帮助。

关于javascript - 自定义 Handlebars 助手在没有参数的情况下无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068500/

相关文章:

javascript - 逐列而不是逐行打印 HTML 表格?

javascript - String JavaScript 中的反斜杠不算长度,为什么?

backbone.js - 使用 Backbone.history 返回

javascript - Backbone : Event handler not defined?

requirejs - 无法在捆绑的 aurelia 应用程序的单元测试中使用帮助程序类。 RequireJS 配置?

javascript - 为什么我的剑道窗口会自己打开?

javascript - ExtJS 3. Ext.tree.TreeNode OnIconClick 事件

javascript - 需要js,必须引用所需对象两次

javascript - Backbone.js View 的默认值?

javascript - 我如何访问requirejs中定义之外的变量