Как прекомпилировать частичные файлы для handlebars.js?
Я использую handlebars.js, и я хочу начать предварительное компиляцию всего, но я не могу найти способ прекомпилировать частичные. Большинство моих шаблонов фактически являются частичными. Я пробовал просто обрабатывать их как обычные шаблоны, но потом называть их частичным не работает.
Есть ли способ прекомпиляции частичных файлов или, альтернативно, вызвать один шаблон из другого шаблона?
Ответы
Ответ 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