Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有支持递归之类的东西的javascript模板引擎吗?_Javascript_Templates_Recursion - Fatal编程技术网

有支持递归之类的东西的javascript模板引擎吗?

有支持递归之类的东西的javascript模板引擎吗?,javascript,templates,recursion,Javascript,Templates,Recursion,我能想到的最明显的例子是输出嵌套注释。假设您有一个注释树,并且希望使用模板将其输出为嵌套的html(比如列表中的列表或div中的div) “comment”块/函数/标签/助手/任何东西都必须能够以某种方式为注释的子级调用自己 在一个模板文件中是否有支持此类内容的模板引擎 我知道您可以预先计算每个评论的“缩进”或“深度级别”,并将它们作为一个平面列表以正确的顺序发送到模板,但我不希望这样。假设我不想在代码中/模板外将片段缝合在一起-我希望整个页面都包含在一个模板或主题文件中 更新:我想生成嵌套

我能想到的最明显的例子是输出嵌套注释。假设您有一个注释树,并且希望使用模板将其输出为嵌套的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元素,允许您说“在这里插入另一个模板”。查看我的编辑。