0

trueまたはfalseを返すメソッドを持つ単純なjsonRpcServiceがあります。

CCJSおよびSSJSイベントにコード付きのボタンがあります。RPCがtrueを返している場合はコードの実行を停止したいのですが、addCallBackが終了し、SSJSまたは実行中のコードが実行される前に、コードがトリガーされているようです。

他のCCSJ命令またはSSJSコードを続行する前に、addCallBack応答を待つ方法はありますか。falseを返すと、コードの実行が停止することを期待していました。

ここに私のコード:

var lastupdate = '#{javascript:document1.getDocument().getLastModified().toString();}';
var myobject = rpcDocLock.checkUpdate(lastupdate);
myobject.addCallback(function(modified){
    alert(modified);  // #2
    if (modified){
        alert("This document has been modified.");  // #3
        return false;   
    }
});

alert("This alert is triggered and RPC has not finished its execution.") // #1

アラートが実行されている順序を確認できるように、アラートを3つ追加しました。

4

2 に答える 2

1

ボタンに次の行を追加して、Dojo XHR リクエストに関する制御を取得します。

if( ! dojo._xhr )
    dojo._xhr = dojo.xhr;

dojo.xhr = function ( args, ioArgs, addArgs ){
    ioArgs["sync"] = true;
    return dojo._xhr( args, ioArgs, addArgs );
}

これにより、すべての呼び出しが強制的に同期されます (これにより、ブラウザーがブロックされ、タイムアウトが無効になります)。詳細については、こちらを参照してください: dojo.xhrサポートされているオブジェクト プロパティを取得する

これで、RPC 呼び出しを呼び出すことができます。

var myobject = rpcDocLock.checkUpdate(lastupdate);
myobject.addCallback(function(modified){

    // -=> RESET DOJO XHR CALL BACK FIRST!
    dojo.xhr = dojo._xhr;
    delete( dojo._xhr );

    // -=> DO THE OTHER STUFF
    alert(modified);  // #2
    if (modified){
        alert("This document has been modified.");  // #3
        return false;   
    }
});

RPC 呼び出しが失敗したときに正確に何が起こるかはわかりませんが、これによりすべての CSJS が停止する可能性があります (同期されます)。

于 2013-02-19T21:18:08.370 に答える
1

ブラウザーがハングしたように見えるため、Web ブラウザーにブロック コードを記述しないでください。そのため、コールバック関数があります。サーバーから何かを取得する必要がある場合は、そこでコーディングを続けてください。

また、更新が完了した後にトリガーできる onComplete イベントもあります。

================================================== === 編集

これが私が問題を解決する2つの方法です。

  1. クライアント側でコールバック関数を使用して、SSJS コードを非表示のボタン (CSS を使用) に移動します。関数コードが終了し、SSJS コードを開始したい場合は、ID でボタンを見つけ、javascriptList アイテムを介してボタンの click() に移動します。
  2. すべてを SSJS に移動し、ドキュメントが変更された場合は、カスタム バリデーターを使用してユーザーにエラー メッセージを返すか、コード チェックで変更を確認し、計算フィールドに表示されるスコープ変数に値を追加します。
于 2013-02-19T14:54:28.190 に答える