2012-03-07 2 views
1

csjs関数にバインドされたdojoボタンバーがあります。この関数は、datableコントロールに対してpartialrefreshget()を実行します。データテーブルコントロールには、データソースとしてのビューが含まれています。パーシャルリフレッシュを2回トリガした問題

this.keysプロパティで、部分リフレッシュがcontext.getSubmittedValue()をチェックすることによってトリガされたかどうかを確認するロジックを定義しました。この手法を試しているうちに、次のコードが2回トリガされていることに気付きました。

<xp:this.keys><![CDATA[#{javascript: 
var vec = new java.util.Vector() 
vec.add("category"); 


if(context.getSubmittedValue()!=null){ 
    var x = context.getSubmittedValue().trim(); 

    print("--") 
} 

return vec;}]]></xp:this.keys> 

印刷文はコンソールに2回出力され、ロジックは2回トリガされます。誰かが私になぜこれが起こり、私がそれについて何ができるのかを説明することはできますか?私は別の場所や場所で値を確認する必要がありますか?

答えて

1

テストのビットの後、私はmethod.the EXTLIB道場ツールバーpartialrefreshget自分を呼び出すと、ノード上submitvalueが設定されている場合triggerdでのonclickイベントが含まれてあきらめました。このonclikイベントでは、私は

Var v = context.getsubmittedvaleu(); 

If("action".equals(v)){ 
    // do stuff that changes the dataset.. 
} 

イベントハンドラは、データテーブルウィッヒが新しいデータを受信パーシャルリフレッシュに設定されているようなコードを追加しました。これは(ジェレミー・ホッジ)で述べたように(データソースにsubmittedvalueをチェックするよりもはるかにきれいな実装である。

データソースは一度しか更新されますこの方法です。私はそれを追加したいと思います追記として


私がボタンにcontrollistenerを追加することにより、標準的なJavaのスイング/ AWT devの中で行うように直接のTreeNode(複数可)に、このようなイベントを追加するとよいでしょう。

2

フェーズリスナーを実装して各段階のステップを印刷すると、this.keysがLifeCycle中に2回評価されることがわかります。おそらくレンダリングレスポンス中に1回、リストアビューなどの間にもう1回です。私はアプリケーションのロジックをプロパティの計算に入れないでください。なぜなら、アプリケーションのライフサイクルに非常に慣れていなければ、そうは思わない時にトリガできるからです。

+0

私は私のような別の解決策を考え出すために持っていると思います計算を行い、完了したらデータテーブルをリフレッシュするserversideイベントをトリガする。 – jjtbsomhorst

1

私は実際にいくつかのコントロールで2〜3回提出しています。私はそれが解決されていないJSPエンジンのアノマリーだと聞いています。

私はvecを計算した後に要求スコープ変数に書き出します。要求スコープ変数をフェッチするために計算される前にロジックを追加し、存在する場合は値を再計算する代わりにそれを返します。

関連する問題