如何将partials传递给Dust.js模板

Cry*_*tal 1 dust.js

我已经查阅了Dust.js GitHub页面,它说我可以将partials传递给模板,如下所示:

{@partial checkbox_title="JM"}
{>toggle/}
{/partial}
Run Code Online (Sandbox Code Playgroud)

和这样:

{>toggle checkbox_title="Hi JM"/}  
Run Code Online (Sandbox Code Playgroud)

我已经尝试了两种,但它们都没有用,所以我使用了以下内容:

家长:

{< checkbox_title}
Hi JM
{/checkbox_title} 
{>toggle/}
Run Code Online (Sandbox Code Playgroud)

儿童:

{+checkbox_title/}
Run Code Online (Sandbox Code Playgroud)

以上工作,除非我尝试使用以下内容渲染模板:

dust.render("toggle", base.push({checkbox_title:"hhhhhh"}),
    function(err, html) { console.log(html); });
Run Code Online (Sandbox Code Playgroud)

目标:使用dust.render覆盖子模板中的块

Sim*_*mon 6

如果您有一个名为的模板someTemplate,则可以将其包含在另一个模板中{>someTemplate/}.您可以使用分配上下文{>someTemplate:someContext/}并传递内联参数{>someTemplate some_param="A parameter"/}.例:

<h1>{heading}</h1>
<p>{article}</p>
{>someTemplate/}
Run Code Online (Sandbox Code Playgroud)

如果要使用块(它们具有以下语法{+blockName/}或者{+blockName}Default block content{/blockName}必须使用块定义模板,则将该模板包含为部分模板,然后覆盖块.名称为"someTemplate"的示例模板:

<h1>{heading}</h1>
<p>{article}</p>
{+someBlock/}
Run Code Online (Sandbox Code Playgroud)

然后像这样覆盖块:

{>someTemplate/}
{<someBlock}
    My custom block content.
{/someBlock}
Run Code Online (Sandbox Code Playgroud)

EDITS:

要在模板外部自定义块,请使用创建上下文dust.makeBase.可以传递此上下文对象来dust.render代替您的templateData(无论如何灰尘都会在内部执行).然后使用context.shiftBlocks参数作为与要覆盖的块的哈希值,将块添加到上下文中.例:

var context = dust.makeBase(templateData).shiftBlocks({
    someblock: function (chunk, context) {
        return chunk.write('my new block content');
    }
});

dust.render('myTemplate', context, function (error, html) {
    console.log(html);
});
Run Code Online (Sandbox Code Playgroud)

最后的一些评论:说实话,到目前为止我还没有必要这样做.我尝试尽可能多地使用模板语法,以便您可以自己理解模板.无论如何,我希望这会有所帮助.