2013-10-23 41 views
3

我需要從Ember.TEMPLATES獲取模板,使用指定的對象編譯並獲取其原始HTML值。編譯具有指定值的Ember模板

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對象。

我想是這樣,基於我在灰燼代碼已經看到:

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

我想這可能工作,但它實際上並沒有。

基本上我想要做像標準車把:

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

有什麼辦法來編譯指定值的模板,使用Emberjs獲取HTML的結果?

+0

你對Ember.TEMPLATES有什麼評論[「測試」]這是一個「預編譯」模板。你能得到源代碼並編譯一個,就像你在最後一個例子中那樣? –

回答

3

灰燼做some modifications in handlebars compiler,以便能夠使用計算的特性,使模板更新時模式的轉變等

如果你看到view render method,它超過template(context),用它的背景和一些私人定製數據。因此Handlebars.compileEmber.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> 

的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/

+0

非常感謝你的解釋,這使得更有意義,現在我有一些工作。非常感謝和很好的迴應! – TomShreds

+2

不客氣! –

+0

@MarcioJunior你沒有回答這個問題。你將如何閱讀編譯的模板,這是一個js文件,它將包含在你的html中。閱讀後傳遞一個對象到模板並獲取html。該html應該放在你的html元素中。你已經給出了handlebars/Ember編譯的區別,並給出了一個閱讀你的html模板的演示。我問過同樣的問題,但沒有得到令人信服的答案 - http://stackoverflow.com/questions/23306224/handlebars-precompiled-templates-returns-undefined-value/23309047?noredirect=1#23309047 – Jeevi