jquery – 异步加载把手模板

前端之家收集整理的这篇文章主要介绍了jquery – 异步加载把手模板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个函数,它将为我提供一个编译的把手模板(我将所有模板放在不同的文件中),使用ajax调用获取模板并编译它以供使用,但我需要使用一个承诺,所以我可以实际上使用它.
function getTemplate(name){
    $.get('/'+name+'.hbs').success(function(src){
       var template = Handlebars.compile(src);
       //can't return the template here.
    });
}

我如何用promises做到这一点,所以我可以这样做:

$("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版本相同,但.then()使得不必显式创建Deferred.因此代码更紧凑.

猜你在找的jQuery相关文章