如何在Ember中包含给定的Handlebars助手

时间:2014-06-27 10:02:33

标签: ember.js handlebars.js

在Github上,展示了许多Handlebars助手。你可以找到它们here

我想使用它们,但没有想法,如何包含它们。该代码看起来像javascript(文件以.js ...结尾),但是像' import',' export',''默认&# 39;我很困惑。

据我所知(猜测),我必须先包含 if-condition.js 。稍后,其他(包含)文件引用此文件。

但是当我这样做时,控制台会抛出错误:

未捕获的SyntaxError:意外的保留字

有谁有想法,如何让这些代码有效?

1 个答案:

答案 0 :(得分:0)

importexport是下一版Javascript即将发布的module syntax的关键字。您今天可以使用transpiler将其转换为普通的ES5语法来使用它们。

然而,如果你只使用一些助手,那么很容易手工“传递”它们。而不是导出函数,只需将其传递给Ember.Hanldebars.registerBoundHelper调用。这是if-condition助手:

Ember.Handlebars.registerBoundHelper('if-condition', function() {
    var args = [].slice.call(arguments);
    var options = args.pop();
    var context = (options.contexts && options.contexts[0]) || this;

    if (!options.conditional) {
        throw new Error("A conditional callback must be specified when using the if-condition helper");
    }

    // Gather all bound property names to pass in order to observe them
    var properties = options.types.reduce(function(results, type, index) {
        if (type === 'ID') {
            results.push(args[index]);
        }
        return results;
    }, []);

    // Resolve actual values for all params to pass to the conditional callback
    var normalizer = function() {
        return Ember.Handlebars.resolveParams(context, args, options);
    };

    // This effectively makes the helper a bound helper
    // NOTE: 'content' path is used so that multiple properties can be bound to using the `childProperties` argument,
    // however this means that it can only be used with a controller that proxies values to the 'content' property
    return Ember.Handlebars.bind.call(context, 'content', options, true, options.conditional, normalizer, properties);
});