2

使用组装时,我实际上遇到了一个我自己无法解决的问题。

widgetsYAML 前端部分定义了一堆,并包括一个部分放在一边{{> aside}}。直到这里一切都按预期工作!

我现在要做的是获取列表小部件并在备用模板中呈现我的部分。但无论如何它不能按预期工作。

src/templates/layouts/layout-default.hbs

---
layout: src/templates/layouts/layout-default.hbs
widgets:
    - widget_link-list
    - widget_welcome-message
---

<section role="main">
    <h1>Template TwoCol</h1>
    {{> body }}
</section>
<aside role="complementary">
    {{> aside}}
</aside>

src/templates/partials/aside.hbs

{{#each widgets}}
    {{.}}
{{/each}}

使用将{{.}}我上面定义的列表打印为字符串。但如果我尝试这样做{{> .}},控制台会删除以下警告:

警告:部分 . 找不到使用 --force 继续。

4

1 回答 1

5

我通过创建可以从任何 Handlebars 模板调用的自定义帮助程序找到了一种方法。现在我可以使用{{renderPartial 'partialName' context}}.

在我的模板中:

var aside = ['my-widget-a','my-widget-b','my-widget-x'];

{{#each aside}}
    {{renderPartial this ../this}}
{{/each}}

Javascript 模块

module.exports.register = function (Handlebars, context) {

    Handlebars.registerHelper("renderPartial", function (name) {

        var fn,
            template = Handlebars.partials[name];

        if (typeof template !== 'Function') {
            // not compiled, so we can compile it safely
            fn = Handlebars.compile(template);
        } else {

            // already compiled, just reuse it
            fn = template;
        }

        var output = fn(context).replace(/^\s+/, '');

        return new Handlebars.SafeString(output);
    });
};
于 2014-01-28T16:39:34.663 回答