我正在使用Ember 1.0.rc3
开发一个应用,我正在通过Handlebars
请求从我的后端服务器按需加载我的预编译Ajax
模板文件。为了能够处理这个问题,我创建了自己的模板管理器,它从服务器中提取模板并将它们存储在Ember.TEMPLATES
中。
现在,这工作得很好,但是为了懒惰,我想知道是否有可能挂钩Ember
框架内的某些代码并将我的模板管理器作为代理放在前面,以便每一个当Ember做到这一点时,它是通过首先访问我的经理来做到这一点的吗?
编辑:
这是一些代码,基本上我的模板管理器只是一个类,正如我所说的那样 - 从服务器加载预编译模板并将它们放入Ember.TEMPLATES
模板缓存中。
fetchTemplate: function (templateName, templateAlias) {
var alias = templateAlias || templateName;
var retString = '';
// check if the template already exists
if (typeof Ember.TEMPLATES[alias] === 'undefined') {
// create the ajax request object
$.ajax({
type: 'GET',
data: { templateName: templateName },
url: 'template/request',
success: function(data) {
if (typeof data.template === 'string' && data.template !== '') {
var escapedTemplateString =
data.template.replace(/\\n/g, "\\n").replace(/\\r/g, "\\r").replace(/\\t/g, "\\t");
escapedTemplateString = escapedTemplateString.replace(/\s+/g, " ");
// load the template into the Ember.TEMPLATES template cache
Ember.TEMPLATES[alias] = Ember.Handlebars.template(eval("(" + escapedTemplateString + ")"));
retString = alias;
} else {
retString = '';
}
}
});
} else {
retString = alias;
}
return retString;
},
releaseCache: function() {
Ember.TEMPLATES = {};
}
答案 0 :(得分:1)
实现自定义解析程序(或者对默认解析程序进行子类化)可以让您进入Ember的查找模板的过程。但是,我认为您无法成功集成您的方法,因为预期解析将是同步的。