2014-04-26 70 views
1

我有一個模板文件test_temp.handlebars。其內容是,把手預編譯模板返回未定義的值

<div>Hello {{name}}</div> 

我用命令編譯模板在我的命令行,

handlebars test_temp.handlebars -f test_temp.js 

的test_temp.js文件的內容是,

(function() { 
var template = Handlebars.template, templates = Handlebars.templates =Handlebars.templates || {}; 
templates['test_temp'] = template({"compiler":[5,">=2.0.0"],"main":function(depth0,helpers,partials,data) { 
var helper, functionType="function", escapeExpression=this.escapeExpression; 
return "<div>Hello " 
+ escapeExpression(((helper = helpers.name || (depth0 && depth0.name)),(typeof helper === functionType ? helper.call(depth0, {"name":"name","hash":{},"data":data}) : helper))) 
+ "</div>\n"; 
},"useData":true}); 
})(); 

現在我讀我的預編譯模板在我的HTML。

var compiledTemplate = Handlebars.templates['test_temp']; 
var temp_html = compiledTemplate({ name: 'World' }); 
console.log(temp_html); //undefined 

這裏返回到temp_html的值是未定義的。 請讓我知道如何把這個temp_html裏面的div。

$("#tempdiv").html(temp_html); 

當我更新的div內temp_html,拋出的錯誤是,

"Uncaught TypeError: undefined is not a function" 

如何獲得預編譯模板值,並插入一個div內。

回答

2

看到這個答案: https://stackoverflow.com/a/22214119/432089

如果從NPM下載你的車把,您將獲得2.0阿爾法構建,而不是穩定的1.3.0版本。換句話說,很可能你有2.0 alpha預編譯模板,但是你使用的是1.3.0運行時JS。

+1

非常感謝您的鏈接,我得到了答案,它工作正常。 – Jeevi

0

檢查此琴:

http://jsfiddle.net/8TMw4/

<script id="some-template" type="text/x-handlebars-template"> 
    <div>Hello {{name}}</div>  
</script> 

var source = $("#some-template").html(); 
var template = Handlebars.compile(source); 
console.log(template); 
+0

你的代碼在瀏覽器中編譯模板。這將工作。我需要在後端服務器中編譯我的模板,然後像我的代碼那樣讀取js文件,但這不起作用。 – Jeevi

0

我已經完成了這個任務,應用以下過濾器:

  • 在後臺預編譯模板(使用你喜歡的構建工具)。
  • 將預編譯模板加載到Ember.TEMPLATES ['「+ templateName +」']。
  • 您必須遵循ember命名約定,以便Ember識別您的路線,視圖或組件模板所在的位置。這是Ember.DefaultResolverComponentLookup的工作。如果您實現自定義解析器並將其分配給應用程序實例,則可以定義特定的命名約定。

你可以看看這個demo example的構建工具是耙管道或西蘭花。

+0

感謝您的回覆。我使用ember-precompile預編譯了我的.hbs文件。現在我怎樣才能讀取模板並將其放置在div中。我讀了,如 var compiledTemplate = Em.TEMPLATES ['precompile']; compiledTemplate({name:'World'});但不能讀取屬性'推'未定義的錯誤被拋出 – Jeevi