0

我有一个视图,其中包含我想要回答的有关采购订单的各种问题的文档。

使用重复,我列出所有问题。有几种不同类型的问题,所以我只根据 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>  
4

1 回答 1

3

奇怪,但是上面代码的测试数据库似乎并没有给我奇怪的结果。也许是因为数据实际上不是一个向量,而只是一个字符串?

这里有一些提示:

您可以在代码中更改的第一件事是从您的字段中获取所有数据的循环。由于组合框的 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>
于 2013-04-19T19:44:42.773 回答