是否有javascript模板引擎支持像递归一样的东西?

时间:2012-05-14 08:08:48

标签: javascript templates recursion

我能想到的最明显的例子是输出嵌套的注释。假设您有一个注释树,并且您希望使用模板将其输出为嵌套的html(假设列表中的列表或div内的div)。

“comment”块/ function / tag / helper /无论如何都必须能够以某种方式为评论的孩子调用自己。

是否有模板引擎支持一个模板文件中的那种东西?

我知道您可以预先计算每个评论的“缩进”或“深度级别”,并以正确的顺序将它们作为一个平面列表发送到模板,但我们只是说我不想要那。让我们说我不想在代码/模板外部拼接片段 - 我希望整个页面自包含在一个模板或主题文件中。


更新:我想生成嵌套的html。我希望评论 嵌套,而不是显示嵌套。我知道如何使用CSS缩进内容。 :)无论是在浏览器中还是在服务器上完成都无关紧要,因为关键是我希望模板在一个文件中自包含。

如:

var html = render(template, {comments: aTreeOfNestedComments});

(参见?可能是node.js,一个浏览器插件,一些“jQuery”,因为有些人喜欢现在调用javascript ...)看起来jade可以使用mixins来做到这一点。任何基于标签的模板引擎都可以做类似的事情吗?

3 个答案:

答案 0 :(得分:1)

模板引擎可以解决一般的,一劳永逸的问题。虽然嵌套模板看起来像是一个常见的用例,但我没有遇到过很多能够做到这一点的模板引擎。

由于市场没有提供一个好的解决方案,我正在从知道如何渲染自己的JavaScript对象构建我的应用程序。我从不使用模板;每个块都获得对DOM的引用(就像应该附加到它的父元素一样),或者渲染器返回子容器,父元素可以将它添加到合适的位置。

这使我可以使用JS的全部功能,而不受模板引擎的限制。

[编辑] 以下是一种解决方法:如果您需要递归元素,请添加span(如果递归元素应为内联)或div(如果是块元素)。为其提供课程recursiveTemplatedata attribute data-template-name="..."

使用标准模板引擎运行模板。然后,使用jQuery或类似工具查找类recursiveTemplate的所有元素并自行替换它们。

答案 1 :(得分:1)

答案 2 :(得分:-1)

正如@TJHeuvel所说,你可以使用服务器端脚本来产生所需的输出,这将是你做所需的最佳方式。但是,如果你必须使用JavaScript,我会建议jQuery这也可以让你产生所需的结果。

例如:

$("ul li").css("margin-left", "10px");