6

我正在评估http://github.com/janl/mustache.js

我正在考虑随着时间的推移它会如何运作。如果我只是构建一个巨大的对象,小胡子是否足以将其转换为任何形式的 HTML?

所以,我的问题是。有什么是小胡子不能做的吗?

(我的想法是这只是从 JSON 到 HTML 的树转换,但我不确定如何验证它或获得足够的信心来押注它)

进一步澄清

假设我只有一个巨大的物体,然后我在一次迭代中给了一个小胡子模板;HTML中有什么东西不能通过它的语言用小胡子来表达。

4

2 回答 2

8

由于 Mustache 只是 JavaScript 中的一种模板语言,你可以做任何你在 JavaScript 中已经可以做的事情,并且 JavaScript 是图灵完备的。所以不,在 Mustache中没有什么是你不能做的;事实上,你可以在 Mustache 中做任何你不能在 JavaScript 中自己做的事情,它只是让一些事情更方便。

在评估这样的事情时,与其确定它可以做什么和不能做什么,不如问“它是否使我需要做的事情变得容易”和“它是否使我想避免的错误变得难以制造”更有用。”

例如,评估它的一种方法是它是否可以轻松避免跨站点脚本(XSS) 攻击。根据文档“mustache.js 确实在使用标准双胡子语法时转义了所有值”,所以听起来它在帮助防止此类攻击方面做得很好。

为了更好地评估它,您需要提供有关您的要求的更多详细信息。你想做什么?你需要整合什么?

编辑

即使在您澄清之后,仍然不清楚您在寻找什么。即使将自己限制为使用单个视图作为输入来扩展单个 Mustache 模板,您也可以生成任意字符串,因此只需将该字符串作为输入即可生成任意 HTML。

如果您要问是否可以在给定模板和要渲染的视图的情况下执行任意计算,那么答案也是肯定的,因为 Mustache 允许您在模板中调用函数,并且这些函数是用 Javascript 编写的,图灵完备。

但这两个都是微不足道的答案。您可以通过提供任何给定的输出作为输入来产生任何给定的输出,或者您可以通过使用高阶部分来进行任何给定的计算。正如我之前所说,用它可以做的事情不如用它容易做的事情有趣,用它很难犯的错误。

我想可能是您正在寻找的类型的一个弱点是,如果您需要比 Mustache 系统本身提供的更多的功能,则需要将这些功能作为视图的一部分传递。因此,您需要将正在显示的对象与将用于显示它的代码混为一谈。而且,如果您从传递到模板的视图中删除调用 Javascript 的能力,那么您确实会严重限制您可以做的事情。鉴于这些对象被称为“视图”这一事实,您似乎是有意将表示逻辑与它们混合在一起的;这与允许模板直接从模型对象中提取值的模板系统非常不同。

于 2010-09-22T03:09:51.737 回答
3

是的,有很多事情你不能在胡子上做。Mustache 比其他一些功能齐全的模板系统(如 Django 中的模板系统)更简单。Mustache 是一个非常小的模板系统,它鼓励您(通过它缺乏功能)实现“无逻辑”模板。这意味着您可以在其他模板系统中执行的某些处理必须改为在修改发送到模板的数据的代码中完成。

这不是一个糟糕的模板系统,它只是一个旨在简单快速的最小系统。

所以,我想说这个问题的答案是:“是的,有些事情你不能在 Mustache 中做(与其他一些模板系统相比)”。

于 2011-08-22T14:54:16.243 回答