首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编译内联HTMLBars模板?

如何编译内联HTMLBars模板?
EN

Stack Overflow用户
提问于 2015-04-02 00:23:23
回答 1查看 1.7K关注 0票数 2

我有一个内联模板(JavaScript中的模板),用于像这样编译(其中temp是一个工具栏字符串):

代码语言:javascript
复制
var template = Handlebars.compile(temp);
template({model: results}); // Gets the HTML

我试着用HTMLBars代替,但无法完全弄清楚。我做了以下工作:

代码语言:javascript
复制
var template = Ember.HTMLBars.compile(temp);
template({model: results}); // Throws an error that template isn't a function

如何从HTMLBars模板中获取HTML。我也试过:

代码语言:javascript
复制
var template = Ember.HTMLBars.compile(temp);
Ember.HtmlBars.template(template, {model: results});

这不会出错,但在呈现HTML时也不会使用模型。我想我已经接近了,但我不知道该怎么注射这个模型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-02 13:32:06

HTMLBars不像车把那样产生功能。工具栏是一种字符串模板语言:您将一个字符串编译成一个模板函数,然后运行该函数生成一个字符串。HTMLBars将字符串编译为模板,但模板不会生成字符串,而是生成DOM节点。简单的答案是,您将无法对HTMLBars做同样的事情,就像使用手棒一样。我建议在代码中添加另一个字符串模板库(可能是工具栏),或者让视图处理HTMLBars模板,如this question中所示。

如果您有兴趣的话,下面是HTMLBars模板对象编译后的样子(从JSBin控制台转储获得):

代码语言:javascript
复制
[object Object] {
  blockParams: 0,
  build: function build(dom) {
      var el0 = dom.createDocumentFragment();
      var el1 = dom.createTextNode("");
      dom.appendChild(el0, el1);
      var el1 = dom.createTextNode("");
      dom.appendChild(el0, el1);
      return el0;
    },
  cachedFragment: null,
  hasRendered: false,
  isHTMLBars: true,
  isMethod: false,
  isTop: true,
  render: function render(context, env, contextualElement) {
      var dom = env.dom;
      var hooks = env.hooks, content = hooks.content;
      dom.detectNamespace(contextualElement);
      var fragment;
      if (env.useFragmentCache && dom.canClone) {
        if (this.cachedFragment === null) {
          fragment = this.build(dom);
          if (this.hasRendered) {
            this.cachedFragment = fragment;
          } else {
            this.hasRendered = true;
          }
        }
        if (this.cachedFragment) {
          fragment = dom.cloneNode(this.cachedFragment, true);
        }
      } else {
        fragment = this.build(dom);
      }
      if (this.cachedFragment) { dom.repairClonedNode(fragment,[0,1]); }
      var morph0 = dom.createMorphAt(fragment,0,1,contextualElement);
      content(env, morph0, context, "foo");
      return fragment;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29403103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档