编程语言
首页 > 编程语言> > javascript-使用指定值编译Ember模板

javascript-使用指定值编译Ember模板

作者:互联网

我需要从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结果?

解决方法:

Ember做some modifications in handlebars compiler以启用计算属性的使用,在模型更改时使模板更新等.

如果看到view render method,它的作用不只是template(context),它使用了上下文和一些私有自定义数据.因此,Handlebars.compile与Ember.Handlebars.compile不同,我认为Ember.Handlebars.compile中的已编译模板不应在Ember.View之外使用.

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

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

模板

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

Java脚本

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/

标签:handlebars-js,ember-js,javascript
来源: https://codeday.me/bug/20191122/2061044.html