Hogan.js части в предварительно скомпилированном шаблоне

#javascript #node.js #hogan.js

#javascript #node.js #hogan.js

Вопрос:

Возможно ли иметь части в скомпилированном шаблоне? Казалось бы, это возможно, поскольку частичное имя упоминается в скомпилированном объекте, но я понятия не имею, как заставить его работать.

Я занимаюсь предварительной компиляцией Hogan.js шаблоны на стороне сервера (node.js ) и сделать их доступными на стороне клиента. Вот фрагмент шаблона:

 <ul class="log-{{id}}">
  {{#entries}}
    {{> entry}}
  {{/entries}}
</ul>
  

Как только этот шаблон скомпилирован, я вижу атрибут partials в объекте с ключом <entry0

Я могу отобразить шаблон на стороне клиента, используя следующее:

 var data = {id: 11, entries: [{ id: 1, name: 'Entry 1'}, {id: 2, name: 'Entry 2'}]};

template = new Hogan.Template(compiledTemplate);
template.render(data);
  

Шаблон отрисовывается просто отлично, но внутри {{#entries}} {{/entries}} блока ничего нет. Сам partial также предварительно скомпилирован и доступен на стороне клиента. Я пытался передать это несколькими различными способами, в том числе:

  template.render(data, {partials: { entry: compiledEntryTemplate }});
  

Кажется, что все признаки указывают на то, что это должно быть возможно, но я просто не могу понять это или найти документацию где угодно, которая указывает, как это сделать. Я использую Hogan.js 3.0.1

Комментарии:

1. Вы решили свою проблему? Если да, будет полезно предоставить ответы.

Ответ №1:

Удалось разобраться. Следующее сделает скомпилированную часть доступной в вашем скомпилированном шаблоне.

  template.render(data, { entry: new Hogan.Template(compiledEntryTemplate) });
  

Комментарии:

1. У меня такая же (или похожая) проблема, как описано в вашем вопросе, но я не смог решить ее с помощью этого ответа.

Ответ №2:

@TJ вы можете взглянуть на hogan.js набор тестов (https://github.com/twitter/hogan.js/blob/master/test/index.js ). Там вы найдете тестовый пример под названием «Partial Basic», который гласит

 var partialText = "это текст из части - магическое число {{foo}} из переменной";
 var p = Hogan.compile(partialText);

 var text = "Этот шаблон содержит частичный ({{>testPartial}})".
 var t = Hogan.compile(текст);

 var s = t.render({foo: 42}, {testPartial: p});
 is(s, "Этот шаблон содержит частичное (это текст из частичного - магическое число 42 из переменной).", "частичные элементы работают");