assemble - Render a list of strings as Handlebars partial

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-04 15:26:23

问题


Using the assemble i actually stuck on a problem which i can't fix myself.

I'm defining a bunch of widgets in the YAML front matter section and including an partial aside {{> aside}}. Until here everything works as expected!

What i'm trying to do now, is to take the list widgets and rendering my partials within the aside template. But anyhow it does not work as expected.

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}}

Using {{.}} prints my above defined list as string. But if i try to do {{> .}} this, the console drops the following warning:

Warning: The partial . could not be found Use --force to continue.


回答1:


I found a way by creating a custom helper that can be invoked from any Handlebars template. Now i'm able to use {{renderPartial 'partialName' context}}.

In my template:

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

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

Javascript Module

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);
    });
};


来源:https://stackoverflow.com/questions/21403594/assemble-render-a-list-of-strings-as-handlebars-partial

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!