#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 из переменной).", "частичные элементы работают");