我来自PHP背景,并且我使用了CakePHP和Laravel等框架,并且很容易在所有这些框架中使用布局和视图。 在这些模板引擎中使用PHP的可能性提供了一种方法来执行以下操作:
<?php for($i=0; $i<1000; $i++){ ?>
<td>demo</td>
<? } ?>
现在,从Node和express.js开始,我发现模板引擎在这里看起来很基本。我试过hjs,hogan,swig,小胡子,把手......他们都没有提供这两个:
我错过了什么吗?我要求太多了吗? 你会推荐我哪一个?
答案 0 :(得分:2)
Javascript的许多模板引擎都采用了哲学观点,即在逻辑和表示之间实施相当严格的分离会更好,这意味着模板中允许的代码/逻辑的复杂性是有意限制的。有关此主题的快速概述,请参阅http://blog.startifact.com/posts/older/the-new-hot-thing-in-web-development-client-side-templating-languages.html(它关于客户端模板,但由于它的Javascript,很多相同的模板语言是node.js中流行的那些/ 表达)。这种无逻辑模板的概念也存在于PHP世界中,它并不常见。
有关此主题的更多学术性处理,请参阅此论文:http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf。 (作者也是一个流行的Java模板引擎StringTemplate的作者。)作者提出了很多好处,总的来说我同意无逻辑模板的想法,但有时它可以不方便,我发现自己更加关注它...请参阅this link进一步考虑。显然还有那些想要从模板中得到任何东西的人(就像在PHP中一样)并且相信可以依靠程序员的自我约束而不在视图中放入太多代码,这就是像EJS这样的模板引擎进入的地方。
说完这一切之后,重要的是要注意你想要实现的目标是Handlebars(这是&#34;无逻辑&#34;语言之一)以及你尝试过的许多其他语言同样。要在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中创建自定义帮助器以达到类似的效果。