2013-08-12 4 views
1

Я консультировался страница Dust.js GitHub, и он говорит, что я могу передать партиалы в шаблоны, как показано ниже:Как передать партиалы шаблону Dust.js

{@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

ответ

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 вместо вашего шаблонаData (пыль делает это внутренне в любом случае). Затем добавьте блок в контекст, используя 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); 
}); 

Некоторые заключительные комментарии: честно говоря, я не было необходимости делать это до сих пор. Я постараюсь сделать так, чтобы синтаксис шаблона был максимально возможным, чтобы ваши шаблоны могли быть поняты сами по себе. Во всяком случае, я надеюсь, что это поможет.

+0

Большое спасибо Симон ... но мой вопрос был не очень ясен, что я хочу сделать, это переопределить блок, используя dust.render ... – Crystal

+0

Хорошо, никаких проблем. Я добавил, что вам нужно ... надеюсь. – Simon

Смежные вопросы