在 Adob​​e CQ (AEM) 中,如何使用 `data-sly-list` 和 `data-sly-resource` 迭代资源列表?

in Adobe CQ (AEM) how to iterate through a list of resources using `data-sly-list` and `data-sly-resource` in sightly?

在 AEM 6.1 中,结构如下:

 - Page
   - form node
     - parsys
       - node 1
       - node 2
       - ...
       - node n

原始表格有以下有效的代码 <div data-sly-resource="${ 'parsys' @ resourceType='foundation/components/parsys' }" data-sly-unwrap>

我正在尝试更新在最后一个 node n 之前注入内容的表单组件。在表单节点上,我有以下代码:

<div data-sly-list.children="${resource.listChildren}">
    <div data-sly-list.fields="${children.listChildren}">
        <div data-sly-test=${fieldsList.last}> DO SOMETHING BEFORE LAST NODE</div>
        <div data-sly-resource="${fields}"></div>
    </div>
</div>

data-sly-resource 似乎导致服务器挂起,在浏览器等待响应时 cpu 使用率很高。我必须终止服务器进程并重新启动它。

我试过 <div data-sly-resource="${fields @ resourceType = fields.resourceType}"></div> 但它似乎没有按预期呈现字段。

这是遍历节点的正确方法吗?


更新:查看大量 error.log 文件,CPU 峰值似乎是由 RecursionTooDeepException 的无限循环引起的 - 我看不到递归在哪里。

根据Sightly documentation on the Resource block statement,您需要传入资源的路径,相对路径或绝对路径。通过将 <div data-sly-resource="${fields}"></div> 更改为 <div data-sly-resource="${fields.path}"></div>.

,我能够使您的代码正常工作
<div data-sly-list.children="${resource.listChildren}">
    <div data-sly-list.fields="${children.listChildren}">
        <div data-sly-test=${fieldsList.last}> DO SOMETHING BEFORE LAST NODE</div>
        <div data-sly-resource="${fields.path}"></div>
    </div>
</div>

如果您还没有下载 Sightly REPL,我强烈建议您使用它来测试和调试此类场景。

我会创建一个 Sling 模型,return 来自子节点的数据作为它的列表。

参考这个linkhttps://sling.apache.org/documentation/bundles/models.html#collections