Смешивание динамических / предварительно скомпилированных шаблонов руля с использованием сборки

Я использую 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>

Первое предложение, вероятно, даже не стоило добавлять, но эй, ты никогда не знаешь, верно?

Другие вопросы по тегам