requirejs - requireJS 中的 Handlebars 助手

标签 requirejs handlebars.js

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

这是调用 addOn 助手的示例

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

现在,据我所知,上下文之后的所有内容都应该是一个称为选项的哈希。这是我的 addOn.js 的 stub
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) {
...
}

.. 我的每个值都被设置,现在选项变成了一个带有空散列的对象。

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

最佳答案

来自 Handlebars doc on helpers :

A Handlebars helper call is a simple identifier, followed by zero or more parameters (separated by space). Each parameter is a Handlebars expression.
[...]
Handlebars helpers can also receive an optional sequence of key-value pairs as their final parameter (referred to as hash arguments in the documentation). The keys in hash arguments must each be simple identifiers, and the values are Handlebars expressions. This means that values can be simple identifiers, paths, or Strings.



要将您的参数用作散列,您可以将您的助手称为

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

它们将作为 options.hash 提供在你的 helper

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

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

关于requirejs - requireJS 中的 Handlebars 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13810484/

相关文章:

javascript - 使用 require.js 的简单示例

knockout.js - 从现有的 html 页面中提取组件到外部文件

javascript - 如何使用 NodeJs Express 在 Handlebars 中以 JSON 格式显示数组内的对象

javascript - 如何迭代这个 JSON 对象并将每个项目输出为表头?

javascript - 如何将变量传递给 Handlebars(v1.3 with Assemble)中的部分变量?

javascript - Jquery 移动弹出窗口未使用 requireJS 和 backboneJS 触发

Backbone.js 模型的 destroy 方法不会触发成功或错误事件

javascript - 无法在 ckeditor 中设置未定义的属性 'dir'

node.js - Nestjs-i18n 翻译 Handlebars 模板不起作用

templates - Handlebars.js if block 助手 ==