有支持递归之类的东西的javascript模板引擎吗?
我能想到的最明显的例子是输出嵌套注释。假设您有一个注释树,并且希望使用模板将其输出为嵌套的html(比如列表中的列表或div中的div) “comment”块/函数/标签/助手/任何东西都必须能够以某种方式为注释的子级调用自己 在一个模板文件中是否有支持此类内容的模板引擎 我知道您可以预先计算每个评论的“缩进”或“深度级别”,并将它们作为一个平面列表以正确的顺序发送到模板,但我不希望这样。假设我不想在代码中/模板外将片段缝合在一起-我希望整个页面都包含在一个模板或主题文件中有支持递归之类的东西的javascript模板引擎吗?,javascript,templates,recursion,Javascript,Templates,Recursion,我能想到的最明显的例子是输出嵌套注释。假设您有一个注释树,并且希望使用模板将其输出为嵌套的html(比如列表中的列表或div中的div) “comment”块/函数/标签/助手/任何东西都必须能够以某种方式为注释的子级调用自己 在一个模板文件中是否有支持此类内容的模板引擎 我知道您可以预先计算每个评论的“缩进”或“深度级别”,并将它们作为一个平面列表以正确的顺序发送到模板,但我不希望这样。假设我不想在代码中/模板外将片段缝合在一起-我希望整个页面都包含在一个模板或主题文件中 更新:我想生成嵌套
更新:我想生成嵌套的html。我希望注释是嵌套的,而不是显示为嵌套的。我知道如何使用CSS缩进内容。:)无论是在浏览器中还是在服务器上完成,都无关紧要,因为关键是我希望模板在一个文件中自包含 例如:
var html = render(template, {comments: aTreeOfNestedComments});
(看到了吗?那可能是node.js,一个浏览器插件,一些现在人们喜欢称之为javascript的“jQuery”)。看起来jade可以通过mixin实现这一点。任何基于标记的模板引擎都可以做类似的事情吗?正如@TJHeuvel所说,您可以使用服务器端脚本生成所需的otput,这将是完成所需任务的最佳方式。但是,如果您必须使用JavaScript,我建议jQuery这也将允许您生成所需的结果 例如:
$("ul li").css("margin-left", "10px");
模板引擎可以解决一般的、非常规的问题。虽然嵌套模板似乎是一个常见的用例,但我还没有遇到过很多能够做到这一点的模板引擎 由于市场上没有提供一个好的解决方案,我正在从知道如何呈现自己的JavaScript对象构建我的应用程序。我从不使用模板;每个块都会获得对DOM的引用(比如is应该附加到的父元素),或者渲染器返回子容器,父元素可以将其添加到适当的位置 这使我能够使用JS的全部功能,而不受模板引擎的限制 [EDIT]这里有一个解决方法:如果需要递归元素,请添加
span
(如果递归元素应该是内联的)或div
(如果是块元素)。给它一个类recursiveTemplate
和一个data template name=“…”
使用标准模板引擎运行模板。然后,使用jQuery或类似工具查找带有类recursiveTemplate的所有元素,并自己替换它们。这里有一个嵌套树的示例:
为什么使用Javascript?你不能让服务器创建输出吗?你所说的“Javascript模板引擎”是什么意思?@penartur:“用Javascript实现的模板引擎”。只要让它成为任何能够输出html的模板引擎,@TJHeuvel:那么,它将在服务器上的node.js和浏览器中使用,以便您可以看到实时预览。我想javascript并不重要。具有不同实现的模板语言(其中一种是javascript)也可以工作。例如,允许定义助手方法。我在最初的问题中已经提到了这一点:我特别不希望这样。我正在给你一个使用示例,但是,您可以使用递归函数将模板应用于整个树,并使树项完全了解周围的树项,我不认为这个答案超出了原始问题的范围。这甚至不是模板代码,这是CSS。我不想在代码中编写或应用递归函数。我说得很具体。我希望递归包含在模板中代码>我正在尝试使某些东西成为设计师的主题。在这里,告诉人们编写DOM操作JavaScript并不是一个真正的选项。在这种情况下,定义您自己的HTML元素,允许您说“在这里插入另一个模板”。查看我的编辑。