向 JSON RPC 回调函数添加参数
Posted
技术标签:
【中文标题】向 JSON RPC 回调函数添加参数【英文标题】:Adding arguments to JSON RPC callback function 【发布时间】: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);
;
【问题讨论】:
您的问题非常令人困惑。我的猜测是您想将显示逻辑与请求逻辑分开。我提供了一个非常简单的基于闭包的答案来分离关注点。你是这个意思吗?如果不是,您究竟要排除哪些变量/表达式? 是的,这正是我想做的。抱歉,这有点令人困惑。我会给你回答一个测试,看看它是否适合我。如果是这样,我会稍微修改一下问题,以便对未来的用户更有用。 【参考方案1】:让我们从明显的基于闭包的方法开始:
function mk_displayAccountTable(inputField, resultRegion)
return function (accounts, exception)
if (exeption) return alert(exception.msg);
var headings = ["Account ID", "First Name", "Last Name", "Balance"];
var i, account, rows = [];
for(i=0; i<accounts.length; i++)
account = accounts[i];
rows.push([account.accountID, account.firstName,
account.lastName, account.prettyAccountBalance]);
var table = getTable(headings, rows);
htmlInsert(resultRegion, table);
;
function customerTable(inputField, resultRegion)
var inputs = commaStringToArray(getRawValue(inputField));
rpcClient.rpcTester.getAccounts(
mk_displayAccountTable(inputField, resultRegion),
inputs);
【讨论】:
这正是我想做的,谢谢。我对其进行了一些修改,并将我的最终代码发布为对上述问题的编辑。以上是关于向 JSON RPC 回调函数添加参数的主要内容,如果未能解决你的问题,请参考以下文章