(D)DWRJSワークフロー



Dwr Js Workflow



DWRワークフローは単純に、

Jspの例では/DWRDemo/dwr/interface/dwrDate.jsファイルが導入され、メソッドは_executeメソッドで呼び出され、送信フレームは_sendData ajaxリクエストをカプセル化し、JSコードは戻り、フロントエンドの解析、_remoteHandleCallback呼び出しメソッドが実行されます。コールバックメソッドを記述します。



dwrDate.getYear = function(callback) { dwr.engine._execute(dwrDate._path, 'dwrDate', 'getYear', callback) } window.onload = function(){ dwrDate.getYear(function(data){ . Document.getElementById ( 'showTime') innerHTML + = 1900 + data + 'year' }) dwrDate.getMonth(function(data){ document.getElementById ( 'showTime') innerHTML + = 1 + data + 'month.' }) } Current Time:

今日、コード分析を記録します。

1.singleShot制御バッチ送信要求フラグとして理解しましたが、実際の表現は一括で送信されません
2.メソッドパラメータに渡される引数パラメータ
3.3。 すべての_execute()メソッドはDWRによって参照に自動的に生成され、最後のパラメーターはデフォルトのコールバックメソッドです。コールバックは属性callDataに格納され、コールバックのプロパティのハンドラー[0]に保存され、コールバックは転送されます。コールバックへ

4.そのようなパラメータに含まれる送信パラメータ



c0-scriptName = dwrDate
c0-methodName = getYear
c0-id = 0

一括送信は使用されません。新しいバッチを送信するたびに新しいオブジェクトになるため、各パラメーターはc0-で始まります。これは、callCountが最初から再び増加するためです0

dwr.engine._execute = function(path, scriptName, methodName, vararg_params) { var singleShot = false if (dwr.engine._batch == null) { dwr.engine.beginBatch() singleShot = true } var batch = dwr.engine._batch // To make them easy to manipulate we copy the arguments into an args array var args = [] for (var i = 0 i

createBatch singleShotがtrueになったら、endBatchメソッドを入力します。



endBatch()メソッド

最初のチェックでいくつかの作業が実行されました。dwr.engine._batchを空にすることはできません。batch.map.callCountをゼロにすることはできません。パラメーターオプションで渡された場合、オプションはオブジェクトであり、パラメーターをサポートします:rpcType、httpMethod、async、timeout、errorHandler 、、 warningHandler、textHtmlHandler、リクエストメッセージヘッダー、メソッドパラメータなどは、ローカルでパーソナライズされたものを実現できますが、他のメソッド呼び出しは誤解を引き起こしません。 _ordered属性は、送信リクエストに応答する正確な順序がajaxリクエストを介して送信された_sendData(バッチ)を取得したかどうかを制御するために使用されます。
dwr.engine.endBatch = function(options) { var batch = dwr.engine._batch if (batch == null) { dwr.engine._handleError(null, { name:'dwr.engine.batchNotBegun', message:'No batch in progress' }) return } dwr.engine._batch = null if (batch.map.callCount == 0) return // The hooks need to be merged carefully to preserve ordering if (options) dwr.engine._mergeBatch(batch, options) // In ordered mode, we don't send unless the list of sent items is empty if (dwr.engine._ordered && dwr.engine._batchesLength != 0) { dwr.engine._batchQueue[dwr.engine._batchQueue.length] = batch } else { dwr.engine._sendData(batch) } }

メソッドsendDataのコードスペースが多すぎて投稿されません

メソッドは主にプッシュモードで配置された_sendDataajax送信リクエストであり、一時的に分析する機能はありません。ajax非同期リクエストの状態変更イベントはdwr.engine._stateChange()で、次のような応答を受信します。

if(toEval!= null)toEval = toEval.replace(dwr.engine._scriptTagProtection、 '')
dwr.engine._eval(toEval)

eval関数はeval()メソッドを呼び出して文字列JS応答を解析し、メソッドdwr.engine._remoteHandleCallbackを実行します。これにより、作成したコールバック関数が実行されます。

throw 'allowScriptTagRemoting is false.' //#DWR-INSERT //#DWR-REPLY dwr.engine._remoteHandleCallback('0','0',118)