直接使用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
。
答案 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对象传递给结果函数。