【问题标题】:For loops and layout support in express.js template engineexpress.js 模板引擎中的 for 循环和布局支持
【发布时间】:2014-10-22 11:11:16
【问题描述】:

我来自 PHP 背景,使用过 CakePHP 和 Laravel 等框架,在所有这些框架中使用布局和视图非常容易。 在这些模板引擎中使用 PHP 的可能性提供了一种方法来执行以下操作:

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

现在,从 Node 和 express.js 开始,我发现模板引擎在这里看起来很基础。我已经尝试过 hjs、hogan、swig、mustache、车把……它们都没有同时提供:

  • 布局支持(模板和视图)
  • 一种像我之前提到的那样进行循环的方法。

我错过了什么吗?我要求太多了吗? 你会推荐我哪一个?

【问题讨论】:

标签: node.js express template-engine


【解决方案1】:

许多 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(这是我最熟悉的模板引擎)中最接近的东西是部分。此链接很好地介绍了这些:http://blog.teamtreehouse.com/handlebars-js-part-2-partials-and-helpers

就我个人而言,我是一个很棒的框架(基于 Express 构建)中的模板语言的忠实粉丝,名为 Derby。它的模板语言类似于 Handlebars,但带有几个方便的扩展 - 足以使它更方便使用,而不会让太多的逻辑潜入模板。不幸的是,我认为它没有独立版本(即您必须使用完整的 Derby 框架),但您可以在 Handlebars 中创建自定义助手以实现类似的效果。

【讨论】:

  • P.S. Derby 支持布局,也支持components
  • 如果您也有兴趣考虑客户端解决方案,您可能还想查看AngularJS,如果您还没有(但我最喜欢的仍然是 Derby)。跨度>
猜你喜欢
  • 2023-03-25
  • 2020-10-31
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多