我的目标是把我所有的把手模板在一个文件夹中,像这样:车把,加载外部模板文件
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