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

gea*_*tal 2 gruntjs assemble

使用汇编我实际上坚持一个我无法自我解决的问题.

widgetsYAML前端部分定义了一堆,并包括一部分{{> 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>
Run Code Online (Sandbox Code Playgroud)

SRC /模板/谐音/ aside.hbs

{{#each widgets}}
    {{.}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

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

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

gea*_*tal 5

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

在我的模板中:

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

{{#each aside}}
    {{renderPartial this ../this}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

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);
    });
};
Run Code Online (Sandbox Code Playgroud)

  • 我们还有一个部分帮助器:https://github.com/helpers/handlebars-helper-partial这将在运行时将YAML前端物质从文件中拉出来并将其与上下文的其余部分合并. (2认同)