Javascript RequireJs导出车把模板
我试图在我的js项目中创建一种模板加载器类,使用主干、requirejs和Handlebar 目标是从应用程序动态加载把手模板,而不是从配置文件动态加载把手模板,如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
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,因为你已经清楚地解释了这个问题,但我似乎无法让它运行(我也不知道如何标记你,因为你的名字中有空格)