2013-05-02 80 views
0

我想通過Ajax-請求將Handlebars模板按需交付到我的Ember.js應用程序。我能夠編譯它的服務器上,我也能爲String提供類似以下的輸出(function):通過JSON按需提供預編譯的把手模板

Ember.TEMPLATES["authentication"] = Ember.Handlebars.template(function anonymous(Handlebars,depth0,helpers,partials,data) { 
this.compilerInfo = [2,'>= 1.0.0-rc.3']; 
helpers = helpers || Ember.Handlebars.helpers; data = data || {}; 
    var buffer = '', stack1, hashTypes, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression; 


    data.buffer.push("<h1>Hooray! It works!</h1>\r\n"); 
    hashTypes = {}; 
    options = {hash:{},contexts:[depth0],types:["ID"],hashTypes:hashTypes,data:data}; 
    data.buffer.push(escapeExpression(((stack1 = helpers.outlet),stack1 ? stack1.call(depth0, "main", options) : helperMissing.call(depth0, "outlet", "main", options)))); 
    return buffer; 

}); 

這正是String我能夠從得到收到JSON對象。現在,我想這個預編譯模板添加到Ember.TEMPLATES對象是這樣的:

if(typeof data.template === 'string' && data.template != '') { 
        var escapedTemplateString = 
         data.template.replace(/\\n/g, "\\n").replace(/\\r/g, "\\r").replace(/\\t/g, "\\t"); 

        Ember.TEMPLATES[templateName] = Ember.Handlebars.template(new Function(escapedTemplateString)); 
       } 

但這種包裝整個「字符串化」功能到另一個anonymous function(){}和我沒有得到任何模板。如果我用eval解壓'字符串化'功能,那麼模板是undefined ...

有沒有人知道如何得到一個function沒有任何從'字符串化'函數包裝? 非常感謝您的時間提前;)

回答

0

沒關係......我忘了聲明我Ajax請求作爲async: false,使渲染過程將等待要加載的模板。

也,我改變了函數調用從eval(escapedTemplateString)eval("(" + escapedTemplateString + ")")

- >一切的現在工作的偉大