【发布时间】:2014-04-01 22:18:10
【问题描述】:
注意:为清楚起见,问题已于 2014 年 4 月 5 日编辑
我正在使用从服务器请求数据的 JSON RPC 进行方法调用。当该数据返回时,它会触发一个回调函数。 JSON RPC 回调函数由服务器自动提供输出和异常参数。目前我有一个函数,它既可以发出 RPC 请求,又可以处理和显示数据。我想将我的请求问题与我的显示问题分开,以便代码更可重用。为此,我还需要将 resultRegion id 参数传递给回调函数。
这是一个当前功能但联合代码的示例:
function customerTable(inputField, resultRegion) {
var displayAccountTable = function(accounts, exception) {
if(exception) {
alert(exception.msg);
}
else {
var headings = ["Account ID", "First Name", "Last Name", "Balance"];
var rows = new Array();
for(var i=0; i<accounts.length; i++) {
var account = accounts[i];
rows[i] = [account.accountID, account.firstName, account.lastName, account.prettyAccountBalance];
}
var table = getTable(headings, rows);
htmlInsert(resultRegion, table);
}
};
var inputs = commaStringToArray(getRawValue(inputField));
rpcClient.rpcTester.getAccounts(displayAccountTable, inputs);
}
编辑:这是我在使用 David SkyMesh 的答案后得到的工作代码。
function customerTable(inputField, resultRegion) {
var inputs = commaStringToArray(getRawValue(inputField));
rpcClient.rpcTester.getAccounts(displayAccountTable(resultRegion), inputs);
}
function displayAccountTable(resultRegion) {
return function (accounts, exception) {
if(exception) { return alert(exception.msg); }
var headings = ["Account ID", "First Name", "Last Name", "Balance"];
var account, rows = [];
for(var i=0; i<accounts.length; i++) {
account = accounts[i];
rows[i] = [account.accountID, account.firstName, account.lastName, account.prettyAccountBalance];
}
var table = getTable(headings, rows);
htmlInsert(resultRegion, table);
};
}
【问题讨论】:
-
您的问题非常令人困惑。我的猜测是您想将显示逻辑与请求逻辑分开。我提供了一个非常简单的基于闭包的答案来分离关注点。你是这个意思吗?如果不是,您究竟要排除哪些变量/表达式?
-
是的,这正是我想做的。抱歉,这有点令人困惑。我会给你回答一个测试,看看它是否适合我。如果是这样,我会稍微修改一下问题,以便对未来的用户更有用。
标签: javascript callback json-rpc