簡體   English   中英

jquery ui autocomplete:導航json對象

[英]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.nameitem.pitch.name 在這種情況下,如果您的JSON對象具有user屬性,則將返回name值。 如果JSON對象具有pitch屬性,則將返回name值。 如果這兩個操作都返回undefined ,則返回一個空字符串並將其附加到a標記中。

這個答案提供了有關使用和特殊情況的更多信息,以便在使用“OR”方法時保持在腦海中。

更新 :修復了null異常的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM