适用于客户端和服务器端渲染的模板语言

24
我正在研究JavaScript模板作为渲染视图的一种方式。目标是能够为启用JavaScript的用户客户端呈现,并为那些没有启用JavaScript的用户(和网络爬虫)服务器端呈现相同的模板/数据。 要求
  1. 客户端渲染。
  2. 服务器端渲染(JVM支持是一个好的补充)。
  3. 合理支持循环、条件语句、文本操作、部分内容、宏和扩展/插件。
  4. 有相当大/活跃的用户社区支持。
到目前为止未找到令人满意的解决方案
  1. Mustache:支持服务器和客户端渲染,拥有庞大/活跃的社区,但是“无逻辑”的模板似乎非常受限制和痛苦。
  2. Node.js 加上 underscore:像underscore这样的JS模板提供了我需要的所有模板灵活性,但使用Node.js在服务器端呈现它们非常脆弱。node.js是新的且相当不稳定,其软件包管理(exports…)需要很多技巧才能正常工作。
  3. Google Closure Templates:这些编译为JS和Java,并具有我想要的许多功能。不幸的是,在浏览Google组时,似乎缺少许多基本功能(例如能够循环遍历关联数组),而制作自己的插件的文档非常稀少和令人痛苦。此外,我无法确定在线社区中谁在使用它,Google不接受对其进行开源贡献,并且他们没有带宽来发布新功能。
  4. isotope:使用Johnson(Mozilla SpiderMonkey JS运行时的Ruby封装程序)在服务器端呈现JS模板。看起来很有前途,但该项目已经超过6个月没有提交过代码。
  5. LiquidLiquid.js:Liquid模板语言看起来很棒,但是liquid.js项目似乎没有经过测试(在IE中没有测试!),没有文档,不清楚是否有人使用它,并且已经有一段时间没有更新了。

1
这是一个有趣的话题。由于您需要模板语言支持服务器和客户端,我有点好奇服务器端模板引擎如何正确处理服务器端动态内容并保留客户端内容(包括模板指令)不变。 - Gelin Luo
3个回答

3
使用EJS,它几乎拥有您所需的所有功能。它可以与express.js配套使用,并且在客户端上运行良好。作为奖励,我会使用backbone.js在客户端和服务器上执行MVC。当然,这需要依赖于node.js。我认为使用express、now和backbone允许您在node.js中获得很多稳定的控制。更不用说SSJS非常棒,代码重用也很棒。

EJS 确实看起来是一种相当不错的模板语言。我的一个担忧是 Node 的稳定性/成熟度,以及你需要单独获取 EJS 帮助程序(https://github.com/masahiroh/express-helpers)。 - Yevgeniy Brikman
@YevgeniyBrikman 没意识到我需要单独获取它们。我喜欢编写很多真正的HTML。 - Raynos
......而且express-helpers不能正常工作。尝试按照他们的说明设置app = helpers.all(app);会导致Node.js抛出一个instanceof检查异常。啊,这个node.js可能对于这个项目来说还太不成熟了。 - Yevgeniy Brikman
@YevgenlyBrikman 不要使用 helpers。问题解决了。Node 的问题在于许多早期的插件没有升级以匹配 0.4 的标准。 - Raynos

1

-1

1
我在w3fools上找不到关于这个主题的任何信息...你能具体说明一下吗? - Webthusiast
我并没有投票反对你的答案,也从未使用过XSLT,只是想在提到w3schools后让事情合理化。 - Farid Nouri Neshat
6
XSLT 是一种笨重、耗内存、操作不便的技术。它可能是唯一被XML书籍所知道的允许声明性树形转换的技术。人们喜欢这个概念,但实际使用起来很糟糕。 - anatoly techtonik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接