小胡子有什么我不能做的吗?

时间:2010-09-22 02:49:28

标签: javascript mustache

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

我正在考虑一段时间内它将如何随着时间的推移而发挥作用。如果我只是构建一个巨大的对象,是否足以将其转换为任何形式的HTML?

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

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

进一步澄清

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

2 个答案:

答案 0 :(得分:8)

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

在评估这样的事情时,不要确定它能做什么和不能做什么,而是要问“它能让我需要做的事情变得容易”并且“它是否会导致我想避免的错误”更有用很难做到。“

例如,评估它的一种方法是它是否容易避免cross-site scripting(XSS)攻击。根据文档“使用标准双胡子语法时,mustache.js确实逃避了所有值”,所以听起来它确实能够帮助防止这些类型的攻击。<​​/ p>

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

修改

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

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

但这两个都是微不足道的答案;您可以通过提供输入来生成任何给定的输出,或者您可以使用更高阶的部分执行任何给定的计算。正如我之前所说,可以用它做什么并不像 easy 用它做什么,以及 hard 用它做出的错误。

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

答案 1 :(得分:3)

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

模板系统不错,它只是一个简单快速的最小系统。

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