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 に答える