从AEM 6.5中HTL中的多字段组件检索值

从AEM 6.5中HTL中的多字段组件检索值,aem,Aem,我有一个遵循这种格式的多字段组件 <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"

我有一个遵循这种格式的多字段组件

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    jcr:primaryType="nt:unstructured"
    jcr:title="Awards List"
    sling:resourceType="cq/gui/components/authoring/dialog">
    <content
        jcr:primaryType="nt:unstructured"
        sling:resourceType="granite/ui/components/coral/foundation/container">
        <layout
            jcr:primaryType="nt:unstructured"
            sling:resourceType="granite/ui/components/coral/foundation/tabs"
            type="-nav"/>
        <items jcr:primaryType="nt:unstructured">
            <awards
                jcr:primaryType="nt:unstructured"
                jcr:title="Awards Properties"
                sling:resourceType="granite/ui/components/foundation/section">
                <layout
                    jcr:primaryType="nt:unstructured"
                    sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"/>
                <items jcr:primaryType="nt:unstructured">
                    <column
                        jcr:primaryType="nt:unstructured"
                        sling:resourceType="granite/ui/components/coral/foundation/container">
                        <items jcr:primaryType="nt:unstructured">
                            <description
                                jcr:primaryType="nt:unstructured"
                                sling:resourceType="granite/ui/components/coral/foundation/form/textarea"
                                fieldLabel="Description"
                                name="./description"/>
                            <awards
                                jcr:primaryType="nt:unstructured"
                                sling:resourceType="granite/ui/components/coral/foundation/form/multifield"
                                composite="{Boolean}true"
                                fieldLabel="Awards">
                                <field
                                    jcr:primaryType="nt:unstructured"
                                    sling:resourceType="granite/ui/components/coral/foundation/container"
                                    name="./awards">
                                    <items jcr:primaryType="nt:unstructured">
                                        <column
                                            jcr:primaryType="nt:unstructured"
                                            sling:resourceType="granite/ui/components/coral/foundation/container">
                                            <items jcr:primaryType="nt:unstructured">
                                                <awardtype
                                                    jcr:primaryType="nt:unstructured"
                                                    sling:resourceType="granite/ui/components/coral/foundation/form/select"
                                                    fieldDescription="Select Award Type"
                                                    fieldLabel="Award Type"
                                                    name="./type">
                                                    <items jcr:primaryType="nt:unstructured">
                                                        <gold
                                                            jcr:primaryType="nt:unstructured"
                                                            text="gold"
                                                            value="gold"/>
                                                        <silver
                                                            jcr:primaryType="nt:unstructured"
                                                            text="silver"
                                                            value="silver"/>
                                                        <bronze
                                                            jcr:primaryType="nt:unstructured"
                                                            text="bronze"
                                                            value="bronze"/>
                                                        <other
                                                            jcr:primaryType="nt:unstructured"
                                                            text="other"
                                                            value="other"/>
                                                    </items>
                                                </awardtype>
                                                <award
                                                    jcr:primaryType="nt:unstructured"
                                                    sling:resourceType="granite/ui/components/coral/foundation/form/textfield"
                                                    fieldDescription="Name of Award"
                                                    fieldLabel="Award Name"
                                                    name="./award"/>
                                            </items>
                                        </column>
                                    </items>
                                </field>
                            </awards>
                        </items>
                    </column>
                </items>
            </awards>
        </items>
    </content>
</jcr:root>
和使用

<div data-sly-use.awardsObject="awardslist.js">
    <p>
        ${awardsObject.description}
        ${awardsObject.awards}
    </p>
</div>


${awardsObject.description}
${awardsObject.awards}


但我不能得到任何回报的奖励。我已尝试对awards对象进行字符串化,以查看是否获得了任何数据,但没有获得任何数据。

这可能是因为您使用的是复合多字段(查看属性
composite=“{Boolean}true”
)它通常将表单内容作为复合内容处理,并在当前组件下创建子节点以保存属性值

如果为true,则将窗体内容值处理为复合值

复合多字段支持嵌套另一个多字段(复合或 不)。但是,非复合的不支持嵌套

例如,给定字段的name属性是addresses,而 子体字段具有以下名称属性值:

它将在存储库中保存以下结构:

由于
properties
对象只保存当前资源的属性,
${properties.awards}
将为空,因此它不显示任何内容

创建一个Sling模型或Java/Javascript使用API类来获取列表,然后在HTL文件中使用它会更容易

示例JS使用API

"use strict";

use(function () {
    var awards = resource.getChild("awards").listChildren();

    return {
        awards: awards,
    };
});
HTL代码示例

<sly data-sly-use.children="children.js">
    <ul data-sly-list.award="${children.awards}">
        <li>${award.type}</li>
    </ul>
<sly>

  • ${award.type}

请注意,
properties
对象是的实例,它只返回当前资源的属性。由于多字段值存储为子资源,因此在访问其属性之前,您需要先访问子资源。

我尝试使用javascript使用类,并且我能够让它与其他字段一起使用,但我不确定如何将其与多字段一起使用。我使用了var-awards=granite.resource.properties[“awards”];但我无法从中获得任何数据。我用更多的细节更新了我的问题。@Matt,用更多的解释更新了答案。
<div data-sly-use.awardsObject="awardslist.js">
    <p>
        ${awardsObject.description}
        ${awardsObject.awards}
    </p>
</div>
street1
street2  
postcode 
city/name 
city/state  
city/country/name
gps/lat 
gps/long
 + addresses   + item0
     - street1
     - street2
     - postcode
     + city
       - name
       - state
       + country
         - name
     + gps
       - lat
       - long   + item1
     - street1
     - street2
     - postcode
     + city
       - name
       - state
       + country
         - name
     + gps
       - lat
       - long
"use strict";

use(function () {
    var awards = resource.getChild("awards").listChildren();

    return {
        awards: awards,
    };
});
<sly data-sly-use.children="children.js">
    <ul data-sly-list.award="${children.awards}">
        <li>${award.type}</li>
    </ul>
<sly>