我正在尝试编写一个函数,该函数将为我提供一个已编译的车把模板(我将所有模板都放在单独的文件中),使用 ajax 调用来获取模板并编译它以供使用,但我需要使用承诺,以便我可以实际使用它。
function getTemplate(name){
$.get('/'+name+'.hbs').success(function(src){
var template = Handlebars.compile(src);
//can't return the template here.
});
}
我如何通过承诺来做到这一点,这样我就可以做类似的事情:
$("a").click(function(e){
getTemplate('form').done(function(template){
$("body").append(template({
name: "My Name"
})
);
});
});
Chovy,我看到你已经接受了答案,但你可能有兴趣知道getTemplate
可以通过链接.then()
而不是.success()
,几乎可以像问题中那样写:
function getTemplate(name) {
return $.get('/'+name+'.hbs').then(function(src) {
return Handlebars.compile(src);
});
}
或者,采用 charlietfl 的想法传入数据并返回一个完全组合的片段的 Promise :
function getTemplate(name, data) {
return $.get('/'+name+'.hbs').then(function(src) {
return Handlebars.compile(src)(data);
});
}
nett 效果与 charlietfl 的版本相同getTemplate
but .then()
使得没有必要显式创建 Deferred。因此代码更加紧凑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)