使用 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>© 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 以获得说明。
两件事:
data-sly-repeat
重复标记的整个元素,而 data-sly-list
只重复元素的内容。在您的情况下,似乎 list
更合适。您可以消除当前正在展开的实际 div
。
与其传入 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>
<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>© 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 以获得说明。
两件事:
data-sly-repeat
重复标记的整个元素,而data-sly-list
只重复元素的内容。在您的情况下,似乎list
更合适。您可以消除当前正在展开的实际div
。与其传入 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>