2014-10-22 72 views
0

我來自一個PHP背景,我已經使用了CakePHP和Laravel等框架,並且在所有這些框架中使用佈局和視圖都很容易。 ,並利用這些模板引擎PHP內的可能性提供了一種方法做的事情,如:For循環和佈局支持express.js模板引擎

<?php for($i=0; $i<1000; $i++){ ?> 
    <td>demo</td> 
<? } ?> 

現在,隨着節點和express.js開始我發現模板引擎似乎很基本在這裏。我試過HJS,霍根,痛飲,小鬍子,車把......他們都同時提供:

  • 佈局支持(模板和視圖)
  • 辦法做到循環像我之前命名。

我錯過了什麼嗎?我是否要求太多? 你會推薦我哪一個?

+0

你試過** EJS **嗎? – 2014-10-22 11:13:18

+0

@ArunGhosh nop,但它似乎[它需要另一個插件的佈局支持](https://github.com/Soarez/express-ejs-layouts),對不對? – Alvaro 2014-10-22 11:15:10

+0

看一看http://www.embeddedjs.com/ – 2014-10-22 11:16:39

回答

2

很多JavaScript的模板引擎都採用哲學觀點,認爲在邏輯和表示之間強制執行相當嚴格的分離會更好,這意味着模板中允許的代碼/邏輯的複雜性是有意限制的。有關此主題的快速概述,請參閱http://blog.startifact.com/posts/older/the-new-hot-thing-in-web-development-client-side-templating-languages.html(這是關於客戶端模板的,但由於它是Javascript,因此很多相同的模板語言是在node.js/Express中流行的模板語言)。這種無邏輯模板的思想也存在於PHP世界中,但它並不常見。

有關此主題的更多學術性處理,請參閱此論文:http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf。 (作者還是一個流行的Java模板引擎的作者,名爲StringTemplate。)作者提出了很多優點,總的來說,我贊同無邏輯模板的概念,但有時它可能不方便,而且我發現自己更多的圍繞它...看到this link進一步考慮。顯然,也有人希望能夠從模板中獲得任何東西(就像你可以在PHP中一樣),並相信依靠程序員的自我約束不要在視圖中放置太多代碼是很好的,這是模板的地方像EJS這樣的引擎進來。

說了這麼多,重要的是要注意,你想要在Handlebars(這是一種「無邏輯」的語言)中可能實現的,也可能是你嘗試過的許多其他的。要在Handlebars中執行此操作,您需要創建一個自定義助手。這可能是你在找什麼:

https://www.npmjs.org/package/handlebars-helper-repeat

用法示例:

{{#repeat 10}} 
    {{> button }} 
{{/repeat}} 

您還可以擴展它能夠支持參數能夠控制的起始編號或增量儘管這可能會在準備模板數據的同時進入JS代碼中更好的邏輯(根據Handlebars哲學)。

關於佈局,Handlebars(這是我最熟悉的模板引擎)中最接近的部分是partials。這個鏈接提供了一個很好的介紹:http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers

就我個人而言,我是一個叫做Derby的真棒框架(建立在Express上)模板語言的忠實粉絲。它的模板語言與Handlebars類似,但帶有幾個方便的擴展 - 足以讓它更方便使用,而不會讓太多的邏輯陷入模板。不幸的是,我不認爲它有一個獨立的版本(即你必須使用完整的Derby框架),但是你可以在Handlebars中創建自定義助手以達到類似的效果。

+0

P.S. Derby支持佈局,並且還支持[組件](http://derbyjs.com/0.5/views#components)。 – 2014-10-22 12:43:28

+0

如果您也有興趣考慮客戶端解決方案,那麼您可能還想查看[AngularJS](https://angularjs.org/),如果您還沒有(但我最喜歡的還是德比) 。 – 2014-10-22 12:50:17