Javascript RequireJs导出车把模板

Javascript RequireJs导出车把模板,javascript,backbone.js,requirejs,handlebars.js,Javascript,Backbone.js,Requirejs,Handlebars.js,我试图在我的js项目中创建一种模板加载器类,使用主干、requirejs和Handlebar 目标是从应用程序动态加载把手模板,而不是从配置文件动态加载把手模板,如 something.addTemplate('text!path/to/template','templateName'); 在课堂上,我有以下几点: [...] addTemplate : function (path,name) { //_templates is an

我试图在我的js项目中创建一种模板加载器类,使用主干、requirejs和Handlebar

目标是从应用程序动态加载把手模板,而不是从配置文件动态加载把手模板,如

something.addTemplate('text!path/to/template','templateName');
在课堂上,我有以下几点:

    [...]
    addTemplate : function (path,name)
    {          
      //_templates is an array defined outside
      _templates[name] = require([path],function(tpl){
        result = Handlebars.compile(tpl);  //this is a Handlebar compiled template
        return result;
       });

      console.log(_templates[name]); // returns the js code of the require function (i think)                             
    },
    [...other stuff...]
因此,在addTemplate函数的末尾,_templats[name]不包含编译后的模板

你能帮我吗

编辑

在聊天中得到一些建议后,我用更多细节更新了问题:

我试图实现的是只编译一次把手模板,第一次调用它们

我希望在代码中的某个地方能够: templatemanager.addTemplate('path','name');//用requirejs加载文件,用handlebar编译并存储在模板管理器中

在其他地方,可能在很多地方,能够做一些类似的事情 templatemanager.getTemplate('name')

返回已编译的把手模板

我相信由于requirejs的异步特性,我必须使用延迟对象和承诺在addtemplate甚至getTemplate上“做点什么”

那是什么东西

编辑2

我部分解决了重构函数的问题。如果其他人也有同样的问题,我会写在这里:

addTemplate : function (path,name)
    {          
      var deferred = $.Deferred();

      require([path],function(tpl){
        _templates[name]  = Handlebars.compile(tpl);                                          
        deferred.resolve(_templates[name]);                      
      });

      return deferred.promise();
    }

问题是,要求函数是异步的。它的回调在console.log之后执行

您可能想使用

加载单个模板

addTemplate(path, name).then(function() {
   console.log('template added');
}
加载多个模板

var deferredArray=[]

for (...) {
   deferredArray.push(addTemplate(path, name));
}
$.when.apply($, deferredArray).then(function(result) {
   console.log('template added');
});

问题是,要求函数是异步的。它的回调在console.log之后执行

您可能想使用

加载单个模板

addTemplate(path, name).then(function() {
   console.log('template added');
}
加载多个模板

var deferredArray=[]

for (...) {
   deferredArray.push(addTemplate(path, name));
}
$.when.apply($, deferredArray).then(function(result) {
   console.log('template added');
});

问题是,要求函数是异步的。它的回调在console.log之后执行

您可能想使用

加载单个模板

addTemplate(path, name).then(function() {
   console.log('template added');
}
加载多个模板

var deferredArray=[]

for (...) {
   deferredArray.push(addTemplate(path, name));
}
$.when.apply($, deferredArray).then(function(result) {
   console.log('template added');
});

问题是,要求函数是异步的。它的回调在console.log之后执行

您可能想使用

加载单个模板

addTemplate(path, name).then(function() {
   console.log('template added');
}
加载多个模板

var deferredArray=[]

for (...) {
   deferredArray.push(addTemplate(path, name));
}
$.when.apply($, deferredArray).then(function(result) {
   console.log('template added');
});

你能再解释一下吗?我无法理解如何将jquery/promises(例如)与我的代码“合并”。此外,当requirejs完成加载时,将触发作为第二个参数传递的函数。但我无法在该函数内部传递_模板variable@Stormsson您不能将自己的参数传递给require回调函数,因为调用此回调函数的不是您。是RqeuireJs调用此回调并传递所有参数。遗憾的是,它不起作用:(无论如何,我给你+1,因为你已经清楚地解释了问题,但我似乎无法让它运行(我也不知道如何标记你,因为你的名称中有一个空格)你能解释更多吗?我不明白“合并”的方法jquery延迟/承诺(例如)同样,当requirejs完成加载时,作为第二个参数传递的函数被激发。但是我不能在该函数内部传递_模板variable@Stormsson您不能将自己的参数传递给require callback函数,因为调用此回调函数的不是您,而是RqeuireJs调用此回调函数和passes所有参数。遗憾的是,它不起作用:(我给你+1,因为你已经清楚地解释了这个问题,但我似乎无法让它运行(我也不知道如何标记你,因为你的名字中有一个空格)你能解释更多吗?我不明白如何“合并”jquery/promises(例如)同样,当requirejs完成加载时,作为第二个参数传递的函数被激发。但是我不能在该函数内部传递_模板variable@Stormsson您不能将自己的参数传递给require callback函数,因为调用此回调函数的不是您,而是RqeuireJs调用此回调函数和passes所有参数。遗憾的是,它不起作用:(我给你+1,因为你已经清楚地解释了这个问题,但我似乎无法让它运行(我也不知道如何标记你,因为你的名字中有一个空格)你能解释更多吗?我不明白如何“合并”jquery/promises(例如)同样,当requirejs完成加载时,作为第二个参数传递的函数被激发。但是我不能在该函数内部传递_模板variable@Stormsson您不能将自己的参数传递给require callback函数,因为调用此回调函数的不是您,而是RqeuireJs调用此回调函数和passes所有参数。遗憾的是,它不起作用:(无论如何,我给你+1,因为你已经清楚地解释了这个问题,但我似乎无法让它运行(我也不知道如何标记你,因为你的名字中有空格)