【问题标题】:Is it possible to load a Handlebars template via Ajax?是否可以通过 Ajax 加载 Handlebars 模板?
【发布时间】:2012-03-17 04:11:46
【问题描述】:

我想即时加载其他模板。有可能吗?

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    我正在使用 requirejs 和文本插件来动态加载车把模板。

    r.js 优化器会将 handlerbar 模板编译为文本文件,可以使用 requirejs 甚至 ajax 轻松加载

    【讨论】:

      【解决方案2】:

      您可以在Ember.TEMPLATES注册新模板。然后它们将可供查看。

      摘自我的代码(jQuery Ajax 处理程序):

      success: function(data) {
        $(data).filter('script[type="text/x-handlebars"]').each(function() {
          templateName = $(this).attr('data-template-name');
          Ember.TEMPLATES[templateName] = Ember.Handlebars.compile($(this).html());
        });
      }
      

      就是这样。

      【讨论】:

      • Mike...您介意将代码封装到一个更大的包中以便我们可以查看生命周期吗?您如何存储外部模板?它的文件类型是什么?你是用 get 还是 getJSON 加载它?
      • 我从 get 调用的结果中检索模板内容,其中包含 HTML 实体,因为它们会以普通的标准页面响应形式到达。
      • 这是一个 [我的] 拯救世界的解决方案 :) 谢谢!
      • 这通常被认为是好的做法吗?还是应该在第一页加载时加载所有视图?
      • 一般来说,所有模板都作为一个预处理过的数据集加载,但在某些极端情况下,这段代码可能有用。
      【解决方案3】:

      我只是在找同样的东西,正要和下面的 sn-p 玩一玩

      信用:github上的borismus https://gist.github.com/2165681

      <script>
      /*
       * Loads a handlebars.js template at a given URL. Takes an optional name, in which     case,
       * the template is added and is reference-able via templateName.
       */
      function loadTemplate(url, name, callback) {
        var contents = $.get(url, function(templateText) {
          var compiledTemplate = Ember.Handlebars.compile(templateText);
          if (name) {
            Ember.TEMPLATES[name] = compiledTemplate
          } else {
            Ember.View.create({ template: compiledTemplate }).append();
          }
          if (callback) {
            callback();
          }
        });
      }
      </script>
      

      【讨论】:

      • 确实很有趣。它更像是一种原语,加载单个模板。我以前的解决方案允许加载任意数量的模板(更适合我的需要)
      • 我明白了。我实际上非常喜欢多模板“包含”文件的想法,只是为了从 HTML 文件中获得一些噪音,而不是创建太多请求。好电话
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多