[英]jquery ui autocomplete: navigating json objects
Paz的優秀答案讓我在本周通過自動完成的jQuery UI交易進行了粗略的修補。
所有這一切,如果你在json響應中有兩個不同的“基礎”對象,如何選擇正確的json響應。
簡單地說,我有一個ruby實例變量,由兩個模型組成,Pitch和User。 我想基於此實例變量自動完成。 比如,json的反應是
[{"user":{"id":1,"name":"Blah Hugo"}},
{"user":{"id":3,"name":"Blaz Foobar"}},
{"pitch":{"id":2,"name":"Blasters On Business Apparel"}}]
自動完成javascript文件現在看起來像這樣,它只能<snippet>:
.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
如果您不知道任何一個名稱,是否無法獲得通用的“用戶”或“推銷”?
我會有其中一個會的。 什么說你?
我不認為你的東西有多大的錯誤,但可能會略有改善:
.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);
};
您可以嘗試使用||
(邏輯或)用於在.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.name
和item.pitch.name
。 在這種情況下,如果您的JSON對象具有user
屬性,則將返回name
值。 如果JSON對象具有pitch
屬性,則將返回name
值。 如果這兩個操作都返回undefined
,則返回一個空字符串並將其附加到a
標記中。
這個答案提供了有關使用和特殊情況的更多信息,以便在使用“OR”方法時保持在腦海中。
更新 :修復了null
異常的可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.