【问题标题】:How to loop through AEM multifield component when each field has multiple values当每个字段有多个值时如何循环遍历 AEM 多字段组件
【发布时间】:2018-05-25 09:03:10
【问题描述】:

我创建了一个自定义多字段组件(名为“面包屑”),将用作页面的面包屑导航。每个多字段项由一个文本字段和一个路径浏览器组成。我想将每个多字段项目列为锚标记,其中“文本”属性作为文本,“链接”属性作为 href。

现在,我的 html 列出了如下属性:

<div>
    <p>${properties.text}</p>
    <p>${properties.link}</p>
</div>

将其输出到页面:

text 1,text 2

link 1,link 2

我知道如何对每个属性使用 data-sly-list 和 data-sly-repeat 来获取所有文本和链接的列表,如下所示:

<ul data-sly-list="${properties.text}">
    <li><p>${items}</p></li>
</ul>

<ul data-sly-list="${properties.link}">
    <li><p>${items}</p></li>
</ul>

但是有没有办法将这两个属性都列在一个元素中,看起来像这样:

<ul data-sly-repeat.breadcrumbs="${properties}">
    <li>
        <a href="${breadcrumbs.text}">
            ${breadcrumbs.link}
        </a>
    </li>
</ul>

我也尝试过使用自定义 js 文件进行 data-sly-use,但也无法让多个属性在一个元素中循环。

【问题讨论】:

    标签: javascript html aem


    【解决方案1】:

    我强烈建议使用将字段存储为 JSON 或 ACS 多字段之类的节点的多字段,以便您获得更好的数据结构。我不推荐以下解决方案,除非您 100% 确定 linktext 的长度相同且顺序正确。

    也就是说,假设 text 和 link 都是多值属性,你可以这样做:

    <ul data-sly-list.textItem="${properties.text}">
        <li>
            <a data-sly-attribute.href="${properties.link[textItemList.index]}">
                ${textItem}
            </a>
        </li>
    </ul>
    

    这将打印:

    ul>
        <li>
            <a title-href="link1">
    
            </a>
        </li>
    
        <li>
            <a title-href="link2">
    
            </a>
        </li>
    </ul>
    

    由于data-sly-list 的变量名称,自定义标识符textItemList 被创建。我们对textItemList 上的成员index 感兴趣,并使用它在link 中的相同索引处显示项目:properties.link[textItemList.index]

    阅读更多关于data-sly-list in the spec

    *注意:您也可以使用data-sly-repeat 进行此操作

    【讨论】:

    • 谢谢!这个解决方案有效,但我也会研究 ACS 多字段。使用“data-sly-attribute.title.href”有什么意义?这确实正确列出了属性,但我也需要一个常规的“href”属性。当我只使用 href="${properties.link[textItemList.index]}" 它没有显示任何东西......
    • 我编辑了我的答案以使用:data-sly-attribute.href 我之前有一个错误。现在应该可以工作了。例如,这将输出href="link1"
    • 您遇到了什么错误?我没有收到错误,它只显示一个锚标记但没有属性。其他一切似乎都运行良好
    • 我没有收到错误,这是不正确/不必要的添加 .title
    • 现在知道了!普通的“href”不起作用,但这是由于缓存问题。在锚标记中使用“${item}”也不起作用,所以我不得不将其更改为“${textItem}”fyi
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多