Javascript 向JSON RPC回调函数添加参数

Javascript 向JSON RPC回调函数添加参数,javascript,callback,json-rpc,Javascript,Callback,Json Rpc,注:为清晰起见编辑的问题2014年4月5日 我正在使用JSON RPC进行方法调用,该方法从服务器请求数据。当数据返回时,它会触发一个回调函数。JSON RPC回调函数是服务器自动提供的输出和异常参数。目前,我有一个函数,可以发出RPC请求、处理和显示数据。我希望将请求关注点与显示关注点分开,以便代码更易于重用。为此,我还需要将resultRegion id参数传递给回调函数 下面是一个当前功能性但结合在一起的代码示例: function customerTable(inputField, re

注:为清晰起见编辑的问题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);
}
函数自定义表(inputField,resultRegion){
var displayAccountTable=函数(帐户,异常){
如果(例外){
警报(exception.msg);
}
否则{
var标题=[“账户ID”、“名”、“姓”、“余额”];
var rows=新数组();

对于(var i=0;i让我们从明显的基于闭包的方法开始:

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);
}
函数mk_displayAccountTable(输入字段,结果区域){ 返回函数(帐户、异常){ if(exeption)返回警报(exception.msg); var标题=[“账户ID”、“名”、“姓”、“余额”]; var i,科目,行=[];
对于(i=0;i您的问题非常令人困惑。我猜您希望将显示逻辑与请求逻辑分离。我提供了一个非常简单的基于闭包的答案来分离关注点。这就是您的意思吗?如果不是,您正试图排除哪些变量/表达式?是的,这正是我想要做的。很抱歉,我这有点让人困惑。我将给你一个测试的答案,看看它是否对我有效。如果有效,我将编辑这个问题,以便对未来的用户更有用。这正是我想要做的,谢谢。我对它做了一点修改,并将我的最终代码作为对上述问题的编辑发布。
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);
}