使用 data-sly-repeat 的 AEM HTL 循环

AEM HTL looping using data-sly-repeat

<footer id="footer">
                <div class="container">
                    <div class="row double">
                        <div class="6u">
                            <div class="row collapse-at-2">
                                <div data-sly-repeat="${properties.colNum}" data-sly-unwrap>
                                <div class="6u">
                                    <h3>Accumsan</h3>
                                    <ul class="alt">
                                        <li><a href="#">Nascetur nunc varius</a></li>
                                        <li><a href="#">Vis faucibus sed tempor</a></li>
                                        <li><a href="#">Massa amet lobortis vel</a></li>
                                        <li><a href="#">Nascetur nunc varius</a></li>
                                    </ul>
                                </div>
                            </div>
                            </div>
                        </div>
                        <div class="6u">
                            <h2>Aliquam Interdum</h2>
                            <p>Blandit nunc tempor lobortis nunc non. Mi accumsan. Justo aliquet massa adipiscing cubilia eu accumsan id. Arcu accumsan faucibus vis ultricies adipiscing ornare ut. Mi accumsan justo aliquet.</p>
                            <ul class="icons">
                                <li><a href="#" class="icon fa-twitter"><span class="label">Twitter</span></a></li>
                                <li><a href="#" class="icon fa-facebook"><span class="label">Facebook</span></a></li>
                                <li><a href="#" class="icon fa-instagram"><span class="label">Instagram</span></a></li>
                                <li><a href="#" class="icon fa-linkedin"><span class="label">LinkedIn</span></a></li>
                                <li><a href="#" class="icon fa-pinterest"><span class="label">Pinterest</span></a></li>
                            </ul>
                        </div>
                    </div>
                    <ul class="copyright">
                        <li>&copy; Untitled. All rights reserved.</li>
                    </ul>
                </div>
            </footer>

我正在尝试使用 data-sly-repeat 进行循环,并且我已验证 colNum 的值为 2,但循环仍然只 运行ning 一次。换句话说,无论值如何,它都不会循环。我还对值 3 进行了硬编码,但它仍然不会 运行 循环不止一次。不确定我在这里做错了什么。

提前致谢

data-sly-repeat 需要一个可迭代对象。您可以提供一个包含所需元素数量的虚拟数组,或者更好的是,提供一个包含有用内容(例如列名或数据)的数组。

从表面上看,您只能使用 sly-repeat 或 sly-list.So 迭代集合,而不是在这里直接使用 ColNum,您将不得不制作一个简单的集合。 参考:https://docs.adobe.com/docs/en/htl/docs/block-statements.html

您似乎误解了 data-sly-repeat 的用途。您可以阅读 their documentation 以获得说明。

两件事:

  1. data-sly-repeat 重复标记的整个元素,而 data-sly-list 只重复元素的内容。在您的情况下,似乎 list 更合适。您可以消除当前正在展开的实际 div

  2. 与其传入 number 次来重复 HTML,不如传入 list 要迭代的东西。 html 为列表中的每个项目呈现,${item} 变量用于保存当前项目。

因此,您必须编写一些 Java 的 JS 代码才能将 colNum 变成该大小的列表。

例如,使用 JS Use API. (see 创建空可迭代数组的方法)

"use strict";
use(function () {
    let n = properties.get("colNum", 0);
    return {
        columns: [...Array(100)] // empty, iterable, array of size n
    };
});

并从 HTL 调用它。请注意,我删除了多余的 div 并使用 data-sly-list 遍历空元素 n 长度数组

<div class="row collapse-at-2"
     data-sly-use.config="<JS-file-name>"
     data-sly-list="${config.columns}">
    <div class="6u">
        <h3>Accumsan</h3>
        <ul class="alt">
            <li><a href="#">Nascetur nunc varius</a></li>
            <li><a href="#">Vis faucibus sed tempor</a></li>
            <li><a href="#">Massa amet lobortis vel</a></li>
            <li><a href="#">Nascetur nunc varius</a></li>
        </ul>
    </div>
</div>