汇编 - 将字符串列表渲染为Handlebars partial

时间:2014-01-28 10:51:46

标签: gruntjs assemble

使用assemble我实际上遇到了一个我无法解决的问题。

我在YAML front matter部分定义了一堆widgets,并将{{> aside}}部分包括在内。直到这里一切都按预期工作!

我现在要做的是获取列表小部件并在旁边模板中呈现我的部分内容。但无论如何它没有按预期工作。

的src /模板/布局/布局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 /模板/分音/ aside.hbs

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

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

  

警告:部分。无法找到使用--force继续。

1 个答案:

答案 0 :(得分: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);
    });
};