こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

複数の検索フィールド、ターゲットノードに対して、ひとつのオブジェクト・スクリプトで対応するには

2014-02-03 12:18:02 | Designer javascript
javascriptをフォームで書いてると、どうしてもできるだけ全ての機能を一極化したいもんです。
特に、検索エンジンを作ってると、その検索フィールドごとにコマンドを埋め込んでくのはとぉ~っても効率が悪く、手直しなんかのメンテナンスなんかで大変です。
そこで、検索キーと探し出す左記のDOMのモード名を変数として、検索結果をグループごとにやり取りする方法はどうでしょう。

あまり詳しく書く時間がないので簡単に書きましたが、いったい何をしているのかというと。。。

1. フォーム上の値をとって、それとバインドされているDOM側のノード名を当ててやる。
2. そのフォーム上の値を検索キーとしてvTargetの変数へあてがってやる。
3. その変数とノード名を当てたvNodeNameを使ってxfa.resolveNodesで検索をかけてその結果をtargetRowsとしてグループ化する。
4. その後、vRemainderという変数に30づつ検索結果がみれて、最後のページに残り全てをひょうじするよう、余剰を当てる。
5. countGroupの変数に30ごとの番号をあててやり、現在のページを表示するときに使用する。
6. 全てをフォームから消すスクリプトオブジェクトを呼び出す。
7. targetRowsとcountGroupの二つのパラメータを表書き出しのオブジェクトスクリプトへ送ってやって、後は書き出すのみ。


if (mosList.HeadersD.aaaFORM.rawValue != null){vNodeName = 'aaaDOM'; vTarget = mosList.HeadersD.aaaFORM.rawValue;}
if (mosList.HeadersD.bbbFORM.rawValue != null){vNodeName = 'bbbDOM'; vTarget = mosList.HeadersD.bbbFORM.rawValue;}

var targetRows = xfa.resolveNodes("$data.deqroot.mosList.mos.(nodes.namedItem('"+vNodeName+"').value.toUpperCase().indexOf('"+vTarget+"')>=0)");

var vRemainder;
vRemainder= targetRows.length%30;
if (vRemainder== 0){
countGroup = targetRows.length - 30;
}else{
countGroup = targetRows.length - vRemander;
}
cleanUpLines.cleanUpLinesScript();
showtargetPrvBck.showtargetPrvBckScript(targetRows, countGroup);


+++書き出しのスクリプトオブジェクト+++++++
function showtargetPrvBckScript(targetRows, countGroup){

for (i=countGroup; i<targetRows.length; i++){
_dsp.addInstance(0);
var newLine = xfa.resolveNodes("dsp[*]").item(main._dsp.count - 1);
newLine.aaaFORM.rawValue = targetRows.item(i).aaaDOM.value;
newLine.bbbFORM.rawValue = targetRows.item(i).bbbDOM.value;

//ここでDOMから検索結果を写し終える数をあらかじめ作ってhiddenしておいたフィールドに挿入。後で使います。
newLine.num.rawValue = main._dsp.count + countGroup;
if (i>countGroup+28){
Paging.btnNext.caption.value.text = String(i+1);
Paging.btnPrev.caption.value.text = String(i-28);
break;

}else{

//このボタンを押すと最後のページになることを意味する。
Paging.btnNext.caption.value.text = String(targetRows.length);
//このボタンを押すと30列前の検索結果の表のあるページに戻ることを意味する。
Paging.btnPrev.caption.value.text = String(countGroup+1);

}

}
}

なんか、もっと、こう。。。いい方法があるような。。。
でも、時間なしっ!

ねこ