如何在重复控件中访问带有 json 个对象的数组列表

how to access an arraylist with json objects in a repeat control

我正在尝试新的东西。我想通过自定义控件中的 属性 定义传递带有 json 对象的数组列表。 属性 我调用了 cols 并且是对象类型。

在 xpage 上,我计算了 属性 的值,如下所示:

<xc:this.cols><![CDATA[#{javascript:var cols = [];

cols.push({ 
        "colName" : "Petter",
        "colValue"  : "Developer"
    });
cols.push({ 
        "colName" : "Jesper",
        "colValue"  : "Administrator"
    });
return cols;}]]></xc:this.cols>

现在我想在我的中继器中使用这些objects/values。但我不确定如何?

首先,我尝试在我的重复控制之外尝试如何在 JavaScript 中访问它们,例如:

<xp:text escape="true" id="computedField1">
            <xp:this.value><![CDATA[#{javascript:var cols = compositeData.cols;

cols[0]["colValue"]}]]></xp:this.value>
        </xp:text>
        <xp:text escape="true" id="computedField3">
            <xp:this.value><![CDATA[#{javascript:var cols = compositeData.cols;

cols[1]["colValue"]}]]></xp:this.value>
        </xp:text>

这似乎有效,因为我得到了 Developer 和 Administrator 返回的值。

现在我想访问我的重复控件中的 json,但我在这里迷路了。

这是我设置重复控件的方法:

<xp:repeat id="repeat1" rows="30" var="colObj" indexVar="idx"
            value="#{javascript:compositeData.cols}">

然后我在我的重复控件中放置了一个计算文本控件并尝试类似的操作:

<xp:text escape="true" id="computedField2">
                <xp:this.value><![CDATA[#{javascript:colObj[idx]["colValue"]}]]></xp:this.value>
             </xp:text>

但是我得到一个错误:

com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:132)

有人可以解释我做错了什么以及我应该如何正确地做吗?

尝试改变这个:

<xp:text escape="true" id="computedField2">
    <xp:this.value><![CDATA[#{javascript:colObj[idx]["colValue"]}]]>    
    </xp:this.value>
</xp:text>

为此:

<xp:text escape="true" id="computedField2">
    <xp:this.value><![CDATA[#{javascript:colObj["colValue"]}]]>
    </xp:this.value>
</xp:text>

您已经有了 colObj,因此无需获取子集。重复控件处理 idx,因此,重复中的 colObj 与重复外的 colObj[n] 相同。