我已经设置了转发器并使用GetItemValueArray从多值字段中读取值。这将返回数组,如果我使用列表框则会显示。我想用它交叉引用其他一些数据,所以我需要使用转发器。但我不确定如何让转发器使用每行递增的索引。下面的代码"返回rowdata [i]"不认识我。
<xp:repeat id="repeat1" var="rowdata" rows="30">
<xp:this.value>
<![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld")}]]>
</xp:this.value>
<xp:label id="lbl">
<xp:this.value><![CDATA[#{javascript:return rowdata[i];}]]></xp:this.value>
</xp:label>
</xp:repeat>
答案 0 :(得分:5)
rowdata不是对整个myArray值的引用,而是myArray中的迭代条目。换句话说......你已经拥有了你需要的东西。
<xp:label value="#{rowdata}" />
答案 1 :(得分:1)
也许您可以通过仅使用“rowdata”作为文本项的值进行命名来简化代码。然后,您应该只将重复源更改为
myDataSource.getItemValue("myValueFld")
因为它总是返回一个数据数组。它只取决于此项存储的数据类型,因此您可能必须在文本控件中进行转换。
答案 2 :(得分:1)
您的代码有另一个问题,您在此行中没有任何return语句:
<xp:this.value>
<![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld")}]>
</xp:this.value>
所以代码不会返回你的myArray它只返回它的名字作为一次重复的字符串。使用这个值绑定:
value="#{myDataSource.MyMultiValueFld}"
或添加return
:
<xp:this.value>
<![CDATA[#{javascript:var myArray:Array = myDataSource.getItemValueArray("MyMultiValueFld");
return myArray;}]>
</xp:this.value>
然后你应该可以使用Chris Tooheys答案:
<xp:label value="#{rowdata}"/>
答案 3 :(得分:0)
使用重复控件的indexVar
属性设置包含索引的var。
答案 4 :(得分:0)
知道了。最后一段代码是我必须创建一个indexVar =&#34;我&#34;在我的repeat1标签中,但我还必须将我的标签更改为计算字段。最后一段代码如下:
<xp:table>
<xp:repeat id="repeat1" var="rowdata" rows="30" indexVar="i" first="0">
<xp:this.value><![CDATA[#{javascript:myDataSource.getItemValueArray("myMultivalueFld");}]]>
</xp:this.value>
<xp:tr><xp:td>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:var repeat1:com.ibm.xsp.component.xp.XspDataIterator = getComponent("repeat1");
repeat1.getValue()[i];}]]></xp:this.value>
</xp:text>
</xp:td>
</xp:tr>
</xp:repeat>
</xp:table>
如果没有indexVar上的花絮,我不会认为我能得到它。感谢
答案 5 :(得分:0)
您可以进一步修剪该代码。如果您只需要值,则不需要indexvar,也不需要将repeat作为XspDataIterator引用。只需使用rowdata作为变量。
<xp:table>
<xp:repeat id="repeat1" var="rowdata" rows="30">
<xp:this.value><![CDATA[#{javascript:myDataSource.getItemValueArray("myMultivalueFld");}]]>
</xp:this.value>
<xp:tr><xp:td>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:rowdata;}]]></xp:this.value>
</xp:text>
</xp:td>
</xp:tr>
</xp:repeat>
多值字段中的每个值都是rowdata引用的“行”。同样,如果数据源是视图,则每行都将引用文档对象。不要通过从组件内部访问repeat作为组件来处置可用的框架。