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

时间:2013-08-12 18:44:16

标签: dust.js

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

{@partial checkbox_title="JM"}
{>toggle/}
{/partial}

并且像这样:

{>toggle checkbox_title="Hi JM"/}  

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

父:

{< checkbox_title}
Hi JM
{/checkbox_title} 
{>toggle/}

子:

{+checkbox_title/}

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

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

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

1 个答案:

答案 0 :(得分:5)

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

<h1>{heading}</h1>
<p>{article}</p>
{>someTemplate/}

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

<h1>{heading}</h1>
<p>{article}</p>
{+someBlock/}

然后像这样重写块:

{>someTemplate/}
{<someBlock}
    My custom block content.
{/someBlock}

编辑:

要在模板外部自定义块,请使用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);
});

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