我的目標是把我所有的把手模板在一個文件夾中,像這樣:車把,加載外部模板文件
templates/products.hbs
templates/comments.hbs
我發現這個片段在一些地方通過粗略的谷歌搜索,這顯然會加載外部文件中的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));
}
});
}
附註:如果有人可以點我到一個更好的模板引擎,一個真正原生支持外模板文件,比車把組織得更好,我會感激不盡。
另一個問題:我實際上無法命名我的文件mytemplate.hbs
,因爲發生Ajax調用時,它將它視爲二進制文件,並且它以二進制形式出現。我想這是將服務器的.hbs的mime類型設置爲text/html或text/plain的問題,但問題是這是一個Grunt服務器,我不知道如何更改它的MIME類型。
我使用'text'插件for require.js爲handlebars動態加載模板文件取得了很大的成功:https://github.com/requirejs/text – 2014-10-30 02:10:14