如何在Ember.js中渲染预编译的Handlebars模板?

时间:2014-07-23 17:44:00

标签: ember.js handlebars.js

直接使用Handlebars:

var template = Handlebars.compile("<div>template source</div>");
var html = template();

但是当使用预编译模板和Ember.js时,这不会起作用:

var template = Ember.TEMPLATES["myTemplate"];
template(); // throws an error

此外,如果使用Handlebars.compile编译模板,则不会从Ember对象中正确地处理属性,因为未调用get

2 个答案:

答案 0 :(得分:1)

使用Em.Handlebars.compile('template stuff here')(而不是Handlebars.compile)渲染模板,因为Ember根据Ember.Handlebars docs here扩展Handlebars库以自动使用get()方法。

答案 1 :(得分:0)

使用Ember编译器编译的模板很难单独调用。

与普通的Handlebars模板一样,它们是函数,但它们不是进行字符串连接,而是将它们的输出发送到Ember.RenderBuffer(调用push)。

模拟该对象是不够的,因为它们还需要对Ember.View(通常称为它们)的引用,并且属性语法{{mustache}}在内部创建Ember._HandlebarsBoundView(如上所述)在http://emberjs.com/api/classes/Ember._HandlebarsBoundView.html)。

解决方案是使用普通的Handlebars编译器,并将属性作为普通JS对象传递给结果函数。