5

我正在创建一个帮助器来输出 7 或 8 行 HTML 以清理我的模板(并遵守 DRY - 嘿,押韵 - wikka wikka)。

下面是一个调用 addOn 助手的例子

{{#each promotion.CampaignColors}}
    {{{addOn . CampaignColorType.Code CampaignColorType.Name HexColor "some content" "a title"}}}
{{/each}}

现在,据我了解,上下文之后的所有内容都应该是一个称为选项的哈希。这是我的 addOn.js 的存根

define([
    'handlebars',
    'hbs!templates/addOn',
], function (Handlebars, AddOnTemplate) {
    function addOn(context, options) {
        var data = {};
        var compiledTemplate = AddOnTemplate(data);
        console.log(compiledTemplate);
        return compiledTemplate;
    }

    Handlebars.registerHelper('addOn', addOn);
    return new Handlebars.SafeString(addOn);
});

但是,选项仅设置为我传递的第一个参数。如果我将方法签名更改为:

function addOn(context, key, displayName, value, content, title, test, options) {
...
}

.. 我的每一个值都被设置了,options NOW 变成了一个带有空哈希的对象。

明确声明参数有效,但我更愿意使用哈希。关于如何做到这一点的任何想法?

4

1 回答 1

4

来自Handlebars doc on helpers

Handlebars 助手调用是一个简单的标识符,后跟零个或多个参数(以空格分隔)。每个参数都是一个 Handlebars 表达式。
[...]
Handlebars 助手还可以接收可选的键值对序列作为其最终参数(在文档中称为哈希参数)。哈希参数中的每个键都必须是简单的标识符,值是 Handlebars 表达式。这意味着值可以是简单的标识符、路径或字符串。

要将您的参数用作哈希,您可以将您的助手称为

{{{addOn . Code=CampaignColorType.Code HexColor=HexColor Content="some content"}}}

他们会像options.hash你的助手一样可用

define(['handlebars'], function (Handlebars) {
    function addOn(context, options) {
        console.log(options.hash);
    }

    Handlebars.registerHelper('addOn', addOn);
    return new Handlebars.SafeString(addOn);
});
于 2012-12-12T10:09:56.747 回答