2010-09-22 27 views
6

我在评估http://github.com/janl/mustache.js胡须里有什么我不能做的吗?

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

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

(我的想法是,它仅仅是树改造从JSON到HTML,但我不知道如何验证或获得足够的信心对赌吧)

进一步澄清

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

+1

我投票支持社区wiki。 – vol7ron 2010-09-22 03:01:10

+3

考虑到这个名字,我希望你能够让女人昏厥,并且投掷出一个不错的棒球。 – NickHeidke 2011-08-22 14:57:13

回答

8

因为Mustache只是JavaScript中的一种模板语言,所以您可以做任何您已经可以在JavaScript中执行的操作,并且JavaScript是Turing完成的。所以不,没有什么你不能做胡子;事实上,在Mustache中你没有办法用JavaScript做你自己,它只是让一些事情变得更加方便。

当评估这样的事情时,而不是确定它可以做什么和不可以做什么,问“它是否使我需要做的事情容易”以及“它是否犯我想要的错误”避免难以制造。“

例如,评估它的一个方法是是否容易避免cross-site scripting(XSS)攻击。根据文档“mustache.js在使用标准双胡子语法时确实会漏掉所有的值”,所以它听起来像在帮助防止这种类型的攻击方面做得很好。

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

编辑

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

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

但这两个都是微不足道的答案;你可以通过提供输入来产生任何给定的输出,或者你可以通过使用更高阶的部分来进行任何给定的计算。正如我前面所说,有什么可能做的是它比容易与它有关,并且有什么错误与它做。

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

3

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

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

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

相关问题