1

city_1、city_2、city_3 などの一連のフィールドを持つメモ フォームがあります。

XPage があり、その XPage に繰り返しがあります。

繰り返しは、1 ~ 10 の 10 個の値を持つ配列に基づいています

var repArray = new Array() ;
for (var i=1;i<=10;i++) {
repArray.push(i) ;
}

戻ります (repArray) ;

繰り返しの中には、city_1 から city_10 までのフィールドを表示するために使用されるカスタム コントロールがあります。

繰り返しには、渡されるカスタム プロパティ docdatasource があります。また、繰り返しコレクション名を使用して計算される cityFieldName と呼ばれる文字列カスタム プロパティもあるため、最初の繰り返し行では city_1、2 番目では city_2 などになります。

カスタム コントロールの編集可能なテキスト フィールドは、EL 式の compositeData.docdatasource[compositeData.cityFieldName] を使用してバインドされます。

これは問題なく機能しますが、新しいフィールドを追加するたびに、新しいカスタム プロパティを作成し、それを親ページで参照することを覚えておく必要があります。

次のようなデータバインディングを簡単に計算できるようにしたいと思います

compositeData.docdatasource['city_' + indexvar]

ここで、indexvar は現在の行番号を表す変数です。

これは可能ですか?Expression Language では「+」を使用できないと読みました。

4

3 に答える 3

2

まず、カウンターの配列は必要ありません。ちょうど 10 で十分です (数) - 10 回も繰り返します。ただし、配列の配列を作成できます。

var repArray = [];
for (var i=1;i<=10;i++) {
   repArray.push(["city","street","zip","country","planet"]) ;
}
return repArray;

その後、使用できるはずです

#{datasource.indexvar[0]}

都市を縛り、

#{datasource.indexvar[1]}

ストリートをバインドします。等

配列のシーケンスをいじる危険性が少しあります。それが懸念される場合は、ここでオブジェクトを使用する際にさらに深く掘り下げる必要があります。

于 2012-01-26T00:11:40.450 に答える
1

javascriptに計算し、次のようなものを使用します

var viewnam = "#{" +  (compositeData.searchVar )+ "}"
return viewnam

これがカスタムコントロールのページ読み込み時に計算されることを確認してください

于 2012-01-24T19:34:07.533 に答える
0

EL 内で追加を行うことはできませんでしたが、カスタム コントロールの外側でフィールド名を計算し、それらの値をカスタム コントロールに渡すだけで非常に成功しました。

ご希望であれば、私が行ったプレゼンテーションから動作するコードを送信できます。

于 2012-01-24T19:35:03.460 に答える