通常我們需要傳遞額外的數據到callback函數,但是因為所有的回調函數都只有一個參數(遠程方法的返回結果),這就需要一些小技巧了。
解決方案就是使用Javascript的閉包特性。
例如,你的回調函數原本需要像這個樣子:
function callbackFunc(dataFromServer, dataFromBrowser) { // 用dataFromServer和dataFromBrowser做些事情...... }
那么你可以像這個組織你的函數:
var dataFromBrowser = ...; // 定義一個閉包函數來存儲dataFromBrowser的引用,并調用dataFromServer var callbackProxy = function(dataFromServer) { callbackFunc(dataFromServer, dataFromBrowser); }; var callMetaData = { callback:callbackProxy }; Remote.method(params, callMetaData);
(調用元數據在腳本介紹中有解釋)
換句話說,現在你作為callback函數傳遞過來的不是一個真正的callback,他只是一個做為代理的閉包,用來傳遞客戶端的數據。
你可以用更簡介的形式:
var dataFromBrowser = ...; Remote.method(params, { callback:function(dataFromServer) { callbackFunc(dataFromServer, dataFromBrowser); } });
Powered by: BlogJava Copyright © 風之力