Моя цель - разместить все мои шаблоны Handlebars в одной папке, так:
templates/products.hbs
templates/comments.hbs
Я нашел этот фрагмент в нескольких местах через беглый поиск Google, который, по-видимому, будет загружаться в шаблонах Handlebar во внешних файлах, что имеет гораздо больший смысл, чем класть кучу шаблонов в один файл индекса.
(function getTemplateAjax(path) {
var source;
var template;
$.ajax({
url: path, //ex. js/templates/mytemplate.handlebars
cache: true,
success: function(data) {
source = data;
template = Handlebars.compile(source);
$('#target').html(template);
}
});
})()
Проблема в том, что я не понимаю эту функцию или как ее использовать. Почему вся функция заключена в круглые скобки, а затем вызывается вызов функции? например (function x() { ... })()
Я не знаю, что это делает.
И если я не ошибаюсь, похоже, что $('#target')
жестко запрограммирован, когда этого не должно быть. Кроме того, не предполагается ли это, что бы установить переменную data
, чтобы переменные, указанные в шаблоне, работали? Кажется, правильная функция должна быть:
function getTemplateAjax(path, target, jsonData) {
var source;
var template;
$.ajax({
url: path, //ex. js/templates/mytemplate.handlebars
cache: true,
success: function(data) {
source = data;
template = Handlebars.compile(source);
$(target).html(template(jsonData));
}
});
}
Боковое замечание: если кто-то может указать мне на лучший движок шаблонов, тот, который на самом деле поддерживает внешние файлы шаблонов и лучше организован, чем Handlebars, я был бы всегда благодарен.
Другая проблема: я не могу назвать имена файлов mytemplate.hbs
, потому что, когда происходит вызов Ajax, он видит его как двоичный файл, и он встречается как двоичный. Я полагаю, что это проблема установки типа mime сервера для .hbs в text/html или text/plain, но проблема в том, что это сервер Grunt, и я не уверен, как изменить его типы mime.