2013-01-17 139 views
0

是否有可能在用戶傳入的新值加載後重新創建對象?用新的var值重建列表jquery

例如,我有一個充滿api調用信息的對象,其中包括名稱和其他具有必需屬性的URL。

var masterCallList = [ 
    {'CallName':'GetMerchantData','CallUrl': '/Merchants/?MerchantId=' + MerchantId + '&ApiKey=' + ApiKey, 'CallType':'Get', 'Desc':''}, 
    {'CallName':'GetMerchantFeed','CallUrl': '/FeedReturnItems/?MerchantId=' + MerchantId + '&ApiKey=' + ApiKey', 'CallType':'Get' 'Desc':''} 
]; 

在頁面加載我遍歷每個調用,並建立從它的HTML元素包括創建的onclick事件,然後運行該呼叫。

$(document).ready(function(){ 
    //create the call lists and page elements from the master 
    BuildCallLists(); 

我的問題是,我想允許用戶更改其中一個變量,像MERCHANTID,自己正在請求的信息,但他們正在重建時,他們不具備的新的價值。

+0

在執行調用時,通過從表單中獲取用戶可更改的值,而不是在頁面加載時,構建這些值可能會更好。 – Barmar

+0

@Barmar然而,我同時構建html元素並且編輯人員並不總是可以訪問他們可能需要設置的所有變量。所以在這我已經爲他們做了。需要改變的只是我自己和處理api的工程師,所以在所有現實中,我們可以每次修改jquery。我們只是不喜歡。 – jmsa88

回答

0

而不必CallUrl作爲一個字符串的,你可以把它一個函數,該函數的參數,例如:

var masterCallList = [ 
    {'CallName':'GetMerchantData','CallUrlFun': function(MerchantId, ApiKey) { return '/Merchants/?MerchantId=' + MerchantId + '&ApiKey=' + ApiKey; }, 'CallType':'Get', 'Desc':''}, 
    {'CallName':'GetMerchantFeed','CallUrlFun': function(MerchantId, ApiKey) { return '/FeedReturnItems/?MerchantId=' + MerchantId + '&ApiKey=' + ApiKey; }, 'CallType':'Get', 'Desc':''} 
]; 

其中CallUrlFun是新的功能。現在您可以使用給定的參數(MerchantId, ApiKey)來調用該函數。這裏有一個的jsfiddle例如:

另一種選擇是在字符串和字符串替換一個特殊的名字,如:

var masterCallList = [ 
    {'CallName':'GetMerchantData','CallUrlTemplate': '/Merchants/?MerchantId=##MerchantId##&ApiKey=##ApiKey##', 'CallType':'Get', 'Desc':''}, 
    {'CallName':'GetMerchantFeed','CallUrlTemplate': '/FeedReturnItems/?MerchantId=##MerchantId##&ApiKey=##ApiKey##', 'CallType':'Get', 'Desc':''} 
]; 

,你必須CallUrlTemplate含標記##MerchantId####ApiKey##。下面是一個例子的jsfiddle:

順便說一句,通常在JavaScript變量名以小寫字母(例如的代替MERCHANTID MERCHANTID)啓動。

希望這會有所幫助。

+0

對不起,只是現在有機會來測試這個,但是我會讓你知道它是如何發生的。另外我知道一般情況下,你會以小寫開始你的變量,這些只是我從bd中提取的列名,並且懶得放下。 – jmsa88

+0

@ user1985609不用擔心,希望它對您有用! –

+0

謝謝,這完美解決。現在用戶可以通過簡單的輸入設置一個新的變量。我還可以將其添加到其他呼叫中,以便用戶可以創建新的用戶帳戶,新的商家以及獲取/更改現有帳戶。 – jmsa88