Смешивание динамических / предварительно скомпилированных шаблонов руля с использованием сборки
Я использую Grunt и Assemble для создания предварительно скомпилированных шаблонов на моем сайте, но мне нужно динамически создавать некоторые разделы на основе информации, хранящейся в хранилище на стороне клиента. Есть ли способ освободить разделы шаблона от предварительной компиляции?
1 ответ
Мы не можем создавать пользовательские разделители (недостаток Handlebars), но есть несколько решений, которые могут работать для вас. И то и другое не обязательно идиоматично, поэтому вы должны судить, насколько они подходят для проекта, над которым вы работаете.
замена строки
Вы можете использовать некоторые пользовательские (временные) разделители для шаблонов в контенте, которые не должны компилироваться, а затем создать вспомогательный блок, который преобразует эти разделители обратно в допустимые выражения руля во время компиляции (я проверил это для этого ответа, и он работает):
Например:
Handlebars.registerHelper("raw", function(options) {
return options.fn(this).replace(/\[\[/g, '{{').replace(/\]\]/g, '}}');
});
Тогда используйте это так:
{{#raw}}
{{> foo }}
{{/raw}}
внутри foo.hbs
, у вас может быть что-то вроде этого:
<title>[[title]]</title>
и он будет оказывать:
<title>{{title}}</title>
Это решение, несомненно, является хакерским, и у вас могут возникнуть проблемы, если у вас есть примеры кода, встроенные во включенный контент, и один из примеров имеет такой синтаксис (например, [0,1,[foo, bar]]
,
побег
Это решение, скорее всего, лучший путь. Handlebars не будет оценивать шаблоны, которым предшествует \
, Так что вы можете сделать это:
<title>\{{title}}</title>
и он будет оказывать:
<title>{{title}}</title>
Первое предложение, вероятно, даже не стоило добавлять, но эй, ты никогда не знаешь, верно?