Подтвердить что ты не робот

Как прекомпилировать частичные файлы для handlebars.js?

Я использую handlebars.js, и я хочу начать предварительное компиляцию всего, но я не могу найти способ прекомпилировать частичные. Большинство моих шаблонов фактически являются частичными. Я пробовал просто обрабатывать их как обычные шаблоны, но потом называть их частичным не работает.

Есть ли способ прекомпиляции частичных файлов или, альтернативно, вызвать один шаблон из другого шаблона?

4b9b3361

Ответ 1

Я нашел еще лучший метод: предварительно скопируйте все ваши частичные файлы в виде шаблонов, а затем прямо перед тем, как использовать их в своем коде, добавьте следующую строку:

Handlebars.partials = Handlebars.templates;

Улучшения: 1) он короче и 2) он не потеряет никаких настраиваемых помощников, которые вы могли бы передать при вызове родительского шаблона.

Ответ 2

Как упоминалось здесь, на GitHub, в CLI Handlebars добавлен флаг -p.

Итак, вы можете использовать handlebars my_partial.handlebars -p -f output.js

Ответ 3

Я использую HandleBars v3.0.3, и у меня есть частичные, а не частичные шаблоны, предварительно скомпилированные в одном файле.

Этот поток немного запутан, поэтому я обобщаю рабочее решение.

  • Не используйте -p-оператор во время предварительной компиляции.
  • Не регистрируйте частичный шаблон с помощью Handlebars.registerPartial('myPartial', '{{name}}');
  • используйте предложение Натана о отображении частичного объекта в объект шаблонов Handlebars.partials = Handlebars.templates;
  • Обратитесь к частичному шаблону по имени {{ > name}}

Ответ 4

Все еще не уверен в предварительной компиляции частичных файлов, но вот как вызвать один шаблон из другого шаблона с помощью этого вопроса: Помощник Handlebars для составления шаблона

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function(templateName,context){
    return new Handlebars.SafeString(Handlebars.templates[templateName](this));
});

http://jsfiddle.net/EBt8R/

Ответ 5

Мне удалось заставить его работать, предварительно скомпилировав все мои частичные файлы в качестве шаблонов, а затем адаптировав решение Nathans

// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function (templateName) {
    return new Handlebars.SafeString(JST[templateName](this));
});

Итак, для меня Handlebars.templates стал JST, когда я скомпилировал вещи, я заметил его в файле скомпилированных шаблонов.

Ответ 6

for(let [name, template] of Object.entries(handlebars.partials)) {
    handlebars.partials[name] = handlebars.compile(template);
}

Ответ 7

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

Object.entries(Handlebars.templates).forEach(([k, v]) => { if ( k.indexOf('partial') != -1 ) Handlebars.partials[k] = v })

В этом случае мы вставляем только предварительно скомпилированные шаблоны, которые содержат "частичное" в имени. Это позволит вам сохранить их в подпапке partials/ или в названии, например some-partial.hbs