1

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

{@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覆盖子模板中的块

4

1 回答 1

6

如果您有一个名为的模板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(无论如何,dust 在内部都会这样做)。然后将一个块添加到上下文中,使用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);
});

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

于 2013-08-13T07:20:43.483 回答