2017-10-18 85 views
1

我正在尝试新的东西。我想通过自定义控件中的属性定义将json对象传递给arraylist。这个属性叫做cols,属于object类型。如何在重复控件中使用json对象访问arraylist

在我作为跟着已计算的属性值,现在一个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> 

现在在我的中继器我想使用这些对象/值。但我不知道如何?

首先我想重复我的控制范围之外的只是如何访问它们的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> 

这似乎是工作,因为我得到的值,开发人员和管理员返回。

现在我想在我的重复控制中访问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)

有人可以解释我做错了什么,我该如何正确地做到这一点?

回答

2

尝试改变这一点:

<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> 

您alreadyb有colObj所以,没必要弄的子集。重复控制处理idx所以,colObj中的重复与colObj[n]之外的重复相同。

+0

你好罗布。该指数确实为我提供了。谢谢! – Malin