1

私の XPage にはaddOnLoad、スクリプト ブロックが記述されています。しかし、問題は、私が望まない部分的なリフレッシュ中でも発火することです。たとえば、データ テーブルにページャー コントロールがある場合、ページをクリックするとaddOnLoad関数が起動します。これは と の両方dojo.addOnLoadで発生しXSP.addOnLoadます。

dojo.addOnLoad(function() {
    console.log("addOnLoad");
});

これにより、部分的な更新が行われるたびに「addOnLoad」が出力されます。この方法でコードを変更しようとしましたが、うまくいきませんでした。

var addOnLoadFired = false;
dojo.addOnLoad(function() {
    if (addOnLoadFired) {
        return;
    }
    addOnLoadFired = true;
    console.log("addOnLoad");
});

どうすればこれを回避できますか?

4

1 に答える 1

5

リフレッシュ ID を指定せずに部分リフレッシュを実行すると、XPage 全体がリフレッシュされます。UIViewRoot 要素を更新すると、同じことが起こります。どちらの場合も、これには出力スクリプト ブロックが含まれます。そのため、addOnLoad イベントが何度も発生します。

ページャーは、親コンポーネントを自動的に更新します。Pager が XPage に追加されたばかりの場合は、常に UIViewRoot が更新されます。

問題を解決するには、dataTable とページャーを xp:div 要素に埋め込むことができます。もう 1 つのアイデアは、部分的な更新が実行された場合に、出力スクリプト ブロックのレンダリングされたプロパティをチェックインすることです。

編集: プログラムで部分的な更新を確認します(SSJS):

var ajax = new com.ibm.xsp.ajax.AjaxUtil();
if( ajax.isAjaxPartialRefresh(facesContext) == true){
    return "AJAX";
}else{
    return "NOT AJAX!"
}
于 2013-08-02T13:11:57.553 に答える