我有一个视图,其中包含我想要回答的有关采购订单的各种问题的文档。
使用重复,我列出所有问题。有几种不同的问题,所以我只根据FieldType列值渲染我需要的答案字段。我想从问题文档中的DialogChoices字段中提取组合框的选项。
我目前正在选择空组合框后面的下一行显示纯文本而不是selectItems。我的代码在哪里出错?
<xp:comboBox id="comboBox1">
<xp:this.rendered><![CDATA[#{javascript:rowData.getColumnValue("FieldType") == "Dialog Box"; }]]></xp:this.rendered>
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:var doc:NotesDocument = rowData.getDocument();
var choicesVector:java.util.Vector= doc.getItemValue("DialogChoices");
var choices = [];
// loop through the vector, doing push into the array
for (i=0; i<choicesVector.size(); i++) {
choices.push (choicesVector.elementAt(i))
};
return choices;}]]>
</xp:this.value>
</xp:selectItems>
</xp:comboBox>
答案 0 :(得分:3)
奇怪,但是上面代码的测试数据库似乎没有给我带来奇怪的结果。也许是因为数据实际上不是Vector而只是一个字符串?
以下是一些提示:
您可以在代码中更改的第一件事是循环以获取您的字段中的所有数据。由于组合框的value属性已经需要数组或向量,因此您可以将代码更改为:
<xp:this.value><![CDATA[#{javascript:var doc:NotesDocument = rowData.getDocument();
return doc.getItemValue("DialogChoices");
}]]>
</xp:this.value>
但是删除getDocument调用会更好。如果可能,您可以在视图中添加一列用于重复数据源。在此列中,您可以从字段目录中获取数据。这样您就可以使用viewentry的getColumnValue(),这是一种性能优化。类似的东西:
<xp:selectItems>
<xp:this.value><![CDATA[#{try{
return rowData.getColumnValue("DialogChoices");
}catch(e){// do something }]]>
</xp:this.value>
</xp:selectItems>