是否有可能有一个Ember.TEMPLATES代理?

时间:2013-05-24 11:45:18

标签: ember.js handlebars.js

我正在使用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 = {};
}

1 个答案:

答案 0 :(得分:1)

实现自定义解析程序(或者对默认解析程序进行子类化)可以让您进入Ember的查找模板的过程。但是,我认为您无法成功集成您的方法,因为预期解析将是同步的。