3

我需要从中获取模板Ember.TEMPLATES,使用指定的对象对其进行编译并获取其原始 HTML 值。

Ember.TEMPLATES内容(使用生成gruntjs)返回一个函数,并且似乎已经通过Handlebars.template()函数传递,所以例如我会有这个:

Ember.TEMPLATES["test"] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) {
this.compilerInfo = [4,'>= 1.0.0'];
helpers = this.merge(helpers, Ember.Handlebars.helpers); data = data || {};
  var buffer = '', hashTypes, hashContexts, escapeExpression=this.escapeExpression;


  data.buffer.push("<strong>hello world ");
  hashTypes = {};
  hashContexts = {};
  data.buffer.push(escapeExpression(helpers._triageMustache.call(depth0, "test", {hash:{},contexts:[depth0],types:["ID"],hashContexts:hashContexts,hashTypes:hashTypes,data:data})));
  data.buffer.push("</strong>\n");
  return buffer;

});

并希望使用来自 JSON 对象的新值来编译该模板。

我根据我在 Ember 代码中看到的内容尝试了类似的方法:

var test = Ember.TEMPLATES['test'];
var compiled = test({ test: 'value' });

我认为它可能会起作用,但实际上并没有。

基本上我想使用标准车把:

Handlebars.compile('<strong>{{hello}}</strong>', { hello: 'world' });

有什么方法可以编译具有指定值的模板,并使用 Emberjs 获取 HTML 结果?

4

1 回答 1

3

Ember在把手编译器中进行了一些修改,以启用计算属性的使用,在模型更改时更新模板等。

如果您看到视图渲染方法,它的作用不止于此template(context),它使用上下文和一些私有自定义数据。所以Handlebars.compile是不同的Ember.Handlebars.compile,我认为从 Ember.Handlebars.compile 编译的模板不打算在Ember.View.

用 标记脚本类型text/x-raw-handlebars,而不是text/x-handlebars用 . 编译模板Handlebars.compile

以下示例将起作用,但没有 ember 功能:

模板

<script type="text/x-raw-handlebars" data-template-name="custom-template">
    First name: {{firstName}} <br/>Last name: {{lastName}}
</script>

Javascript

App = Ember.Application.create({
    ready: function() {
        var template = Ember.TEMPLATES['custom-template'];                    
        var html = template({ firstName: 'Tom', lastName: 'Dale' });
        $('body').append(html);
    }
});

您可以在此处查看此示例http://jsfiddle.net/marciojunior/MC8QB/

于 2013-11-02T00:43:12.350 回答