2

我正在开发一个应用程序,Ember 1.0.rc3并且我正在通过请求从后端服务器按需Handlebars加载我的预编译模板文件。为了能够处理这个问题,我创建了自己的模板管理器,它从服务器中提取模板并将它们存储在.AjaxEmber.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 = {};
}
4

1 回答 1

1

实现自定义解析器(或继承默认解析器)可以让您利用 Ember 查找模板的过程。但是,我认为您无法成功集成您的方法,因为预计解析是同步的。

于 2013-05-25T02:55:55.063 回答