2015-09-18 100 views
0

的handlebars.js文檔介紹這個例子的模板:什麼是handlebars.js中的模板?

var template = Handlebars.compile('{{foo}}'); 
template({}); 

如果一個檢查模板變量在控制檯,它包含:

function (context, options) { 
    if (!compiled) { 
    compiled = compile(); 
} 
return compiled.call(this, context, options); 
} 

如何,這是一個模板?我理解模板是一些帶有變量的html,而不是一個函數。

此外,關於該呼叫:

template({}); 

這是什麼空函數調用一回事呢?這對於JavaScript程序員來說是很常見和明顯的,例如。我是否錯過了一些使我無法識別它的基本知識?或者這是一些handlebars.js奇怪的是,在他們的文檔中沒有很好解釋?

回答

1

模板是'{{foo}}'。當它被編譯時,你會得到一個帶上下文的函數;上下文爲模板提供可變綁定。因此,給定上述模板,template({ foo: 17 })應產生"17"template({})將呈現{{foo}},表示undefined,產生一個空字符串。

+0

你覺得API文檔可能是這個例子比較好? http://handlebarsjs.com/reference.html – Hexatonic

1

在把手方面的實施方式中,模板是一種功能。您可以使用模板數據調用該函數並取回填充的模板。

模板數據是一個對象,其中的鍵與模板中的{{}}內的名稱相對應。這些鍵的值將被注入到鍵名稱所在的模板中。

因此,在您的示例中,template({})產生"",但template({"foo":"blah"})產生"blah"

稍微更完整的例子:

var template = Handlebars.compile('{{greeting}}, my name is {{name}}'); 

template({"greeting":"Hello","name":"Alice"}) 

// "Hello, my name is Alice" 
+0

謝謝你。你覺得你的更完整的例子會更好地提供API文檔嗎?請參閱http://handlebarsjs.com/reference.html的頂部。我想知道示例代碼如此稀疏的原因是什麼。 – Hexatonic

+0

是的,我認爲是。如果我不知道Handlebars,我不會發現該文檔非常有用。 – adashrod