underscore.js簡(jiǎn)單有效的模板引擎

如今Javascript的模板引擎有很多,多到難以選擇,以至於有個(gè)頁(yè)面幫助你選擇模板引擎。它們的設(shè)計(jì)目標(biāo)和特性也迥異,有基於字符串替換,也有基於Dom文檔樹操作。有的設(shè)計(jì)於瀏覽器端,也有的用於後端Node.js,當(dāng)然還有前後端都支持如dust.js。如果你要開發(fā)單頁(yè)面應(yīng)用程序SPA,流行的框架如AngularJS和EmberJS都包含了雙向數(shù)據(jù)綁定(two way data binding),因而不需要模板引擎了。

我近期開發(fā)熱聞網(wǎng)時(shí),也面臨模板引擎的選擇問題。我個(gè)人很喜歡Angularjs這種雙向數(shù)據(jù)綁定,但是由於這個(gè)項(xiàng)目不是單頁(yè)面應(yīng)用程序,用AngularJS不適合。此外Handlebars.js也很火,可是它的變量標(biāo)記是{{.}},這與我後端的Jinja2模板標(biāo)記衝突,不予考慮。最後我決定使用小而精的Underscore.js庫(kù)。Underscore.js因它提供的大量函數(shù)式編程特性而聞名。我這裏僅討論使用它裏面的template函數(shù)做模板引擎。然而,官方文檔中提到的例子太過簡(jiǎn)單。

var compiled = _.template("hello: <%= name %>");

如上,模板只是一個(gè)JS字符串,不適合複雜的模板。幸好我之前看過另一種用法,更加優(yōu)雅。將模板的內(nèi)容嵌入一個(gè)script標(biāo)籤中,如下所示。

<script type="text/template" id="comment">

<%- comment.user %> post <%- comment.text %>.
</script>

然後在正常的腳本中獲取這段模板內(nèi)容,並生成渲染函數(shù)。

<script>

var render = _.template($('script#comment').html(), {variable: 'comment'});

var data = { user: 'ab', text: 'hello' };
var?result = render(data);

上面片段中result便是參數(shù)渲染後的結(jié)果了。是不是簡(jiǎn)單有效呢?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 提問的智慧 How To Ask Questions The Smart Way Copyright ? 2001...
    Albert陳凱閱讀 2,896評(píng)論 0 8
  • 程序員創(chuàng)業(yè)白皮書 作者:Paul Graham Paul Graham是程序員,專欄作家。他在1995年創(chuàng)建了第一...
    劉立山John閱讀 2,138評(píng)論 0 20
  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,324評(píng)論 3 49
  • 不想太理智, 不想太現(xiàn)實(shí)。 活在夢(mèng)想里, 活在自家里。 放縱與放任, 多么的愜意, 多么的灑脫。 就暫時(shí)這樣, 讓...
    康真閱讀 168評(píng)論 0 1
  • 想起那脫韁的歲月,就情不自禁;想起那可愛可親的人兒,就熱淚盈眶;那時(shí)光、那些人,即算吵鬧過、誤解過,甚至陌路了,...
    644bd5a9d345閱讀 469評(píng)論 0 2

友情鏈接更多精彩內(nèi)容