Рули, загрузка внешних файлов шаблонов

Моя цель - поместить все мои шаблоны 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.

Ответы на вопрос(3)

Ваш ответ на вопрос