2014-04-01 61 views
0

注:问题修改为清楚起见,2014年4月5日添加参数JSON RPC回调函数

我正在使用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); 
} 

编辑:下面是我用大卫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); 
    }; 
} 
+0

你的问题是超级混乱。我的猜测是你想要从请求逻辑分离显示逻辑。我提供了一个非常简单的基于闭包的答案来分离问题。你是这个意思吗?如果不是,你想要分解哪些变量/表达式? –

+0

是的,这正是我想要做的。对不起,这有点令人困惑。我会给你回答一个测试,看看它是否适合我。如果是这样,我会稍微编辑一下这个问题,这对未来的用户更有用。 – sage88

回答

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); 
} 
+0

这正是我想要做的,谢谢。我修改了一下,并发布了我的最终代码,作为对上述问题的编辑。 – sage88