我有一个内联模板(JavaScript中的模板),用于像这样编译(其中temp是一个工具栏字符串):
var template = Handlebars.compile(temp);
template({model: results}); // Gets the HTML我试着用HTMLBars代替,但无法完全弄清楚。我做了以下工作:
var template = Ember.HTMLBars.compile(temp);
template({model: results}); // Throws an error that template isn't a function如何从HTMLBars模板中获取HTML。我也试过:
var template = Ember.HTMLBars.compile(temp);
Ember.HtmlBars.template(template, {model: results});这不会出错,但在呈现HTML时也不会使用模型。我想我已经接近了,但我不知道该怎么注射这个模型。
发布于 2015-04-02 13:32:06
HTMLBars不像车把那样产生功能。工具栏是一种字符串模板语言:您将一个字符串编译成一个模板函数,然后运行该函数生成一个字符串。HTMLBars将字符串编译为模板,但模板不会生成字符串,而是生成DOM节点。简单的答案是,您将无法对HTMLBars做同样的事情,就像使用手棒一样。我建议在代码中添加另一个字符串模板库(可能是工具栏),或者让视图处理HTMLBars模板,如this question中所示。
如果您有兴趣的话,下面是HTMLBars模板对象编译后的样子(从JSBin控制台转储获得):
[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;
}
}https://stackoverflow.com/questions/29403103
复制相似问题