我能想到的最明显的例子是输出嵌套评论。假设你有一棵评论树,你想使用你的模板将它输出为嵌套的 html(比方说列表中的列表或 div 中的 div)。
“评论” block /函数/标签/助手/任何东西都必须能够以某种方式为评论的 child 调用自己。
是否有模板引擎可以在一个模板文件中支持这种东西?
我知道您可以预先计算每个评论的“缩进”或“深度级别”,然后将它们作为一个平面列表以正确的顺序发送到模板,但我只是说我不想那。假设我不想在代码中/在模板之外将片段拼接在一起 - 我希望整个页面都包含在一个模板或主题文件中。
更新:我想生成嵌套的 html。我希望评论是嵌套的,而不是出现嵌套的。我知道如何使用 CSS 缩进。 :) 无论是在浏览器中还是在服务器上完成都无关紧要,因为关键是我希望模板独立于一个文件中。
如:
var html = render(template, {comments: aTreeOfNestedComments});
(看到了吗?这可能是 node.js,一个浏览器插件,一些现在有些人喜欢称之为 javascript 的“jQuery”……)看起来 jade 可以使用 mixins 来做到这一点。任何可以做类似事情的基于标签的模板引擎?
最佳答案
模板引擎可以解决一般的、普通的问题。虽然嵌套模板似乎是一个常见的用例,但我还没有遇到很多可以做到这一点的模板引擎。
由于市场没有提供好的解决方案,我正在从知道如何呈现自身的 JavaScript 对象构建我的应用程序。我从不使用模板;每个 block 都获得对 DOM 的引用(就像应该附加自身的父元素)或渲染器返回子容器,父元素可以将其添加到合适的位置。
这让我可以使用 JS 的全部功能,而不受模板引擎的限制。
[EDIT] 这是一个解决方法:如果您需要递归元素,请添加 span
(如果递归元素应该是内联的)或 div
(如果它是 block 元素)。给它类 recursiveTemplate
和一个 data attribute data-template-name="..."
使用标准模板引擎运行模板。然后用jQuery之类的找到所有recursiveTemplate
类的元素,自己替换。
关于javascript - 是否有支持递归之类的javascript模板引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10579576/