通常我们需要传递额外的数据到 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); } });