在 Adobe 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
在 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