2012-04-27 47 views
1

Paz的出色答案讓我在本週通過jQuery UI自動完成交易完成了一個粗糙的補丁。jquery ui自動完成:瀏覽json對象

說了這麼多,如果你在你的json響應中有兩個不同的「基礎」對象,如何選擇正確的json響應。

簡而言之,我有一個由兩個模型組成的ruby實例變量,即Pitch和User。我想基於這個實例變量自動完成。 JSON響應是,說

​​

JavaScript文件看起來像這樣現在的自動完成,並且它只能<片斷>:

.data("autocomplete")._renderItem = function(ul, item) { 
    return jQuery("<li></li>") 
    .data("item.autocomplete", item) 
    .append("<a>" + (item.user ? item.user.name : item.pitch.name) + "</a>") 
    .appendTo(ul); 
}; 

再次我的問題是這樣的三元我不得不使用。 item[0].name不起作用,也沒有item.item[0].name如果你不知道任何一個的名字,是不是沒有辦法獲得通用的'用戶'或'音調'?

我會盡管其中之一會。你說什麼?

回答

3

我不認爲有太多毛病你有什麼,但也許略有改善將是:

.data("autocomplete")._renderItem = function(ul, item) { 
    item = item.user || item.pitch; 

    return jQuery("<li></li>") 
     .data("item.autocomplete", item) 
     .append("<a>" + item.name + "</a>") 
     .appendTo(ul); 
}; 
1

您可以嘗試使用||(邏輯或)來排序您在.append()方法中使用的三元運算符。

這是做你想做的事嗎?

.data("autocomplete")._renderItem = function(ul, item) { 
    item = item.user || item.pitch || {name:""}; 
    .append("<a>" + item.name + "</a>") 
    return jQuery("<li></li>") 
    .data("item.autocomplete", item) 
    .append("<a>" + item.name + "</a>") 
    .appendTo(ul); 
}; 

這將返回參數列表中的第一個「非錯誤」值;在這種情況下爲item.user.nameitem.pitch.name。在這種情況下,如果您的JSON對象具有user屬性,則將返回name值。如果JSON對象具有pitch屬性,則將返回name值。如果這兩個操作都返回undefined,則會返回一個空字符串並將其附加到a標記中。

這個answer給出了更多關於使用和特殊情況的信息,以便在使用'OR'方法時保留在你的腦海中。

UPDATE:修正了null例外的可能性。

+1

這將拋出一個異常,如果'item.user'是'undefined'或'null' – 2012-04-27 19:00:21

+0

好點。我做了調整。 – arb 2012-04-27 19:20:35