2012-03-29 9 views
7

Patrzę na tutorialu autouzupełniania i mam kilka pytań: http://jqueryui.com/demos/autocomplete/#option-disabledCo to są argumenty "response" i "request" w jQuery UI Autocomplete "source" callback?

$("#tags") 
      // don't navigate away from the field on tab when selecting an item 
      .bind("keydown", function(event) { 
       if (event.keyCode === $.ui.keyCode.TAB && 
         $(this).data("autocomplete").menu.active) { 
        event.preventDefault(); 
       } 
      }) 
      .autocomplete({ 
       minLength: 0, 
       source: function(request, response) { 
        // delegate back to autocomplete, but extract the last term 
        response($.ui.autocomplete.filter(
         availableTags, extractLast(request.term))); 
       }, 
       focus: function() { 
        // prevent value inserted on focus 
        return false; 
       }, 
       select: function(event, ui) { 
        var terms = split(this.value); 
        // remove the current input 
        terms.pop(); 
        // add the selected item 
        terms.push(ui.item.value); 
        // add placeholder to get the comma-and-space at the end 
        terms.push(""); 
        this.value = terms.join(", "); 
        return false; 
       } 
      }); 

Rozumiem parametry źródła jest request i response. Czy są to zastrzeżone słowa kluczowe? Nie mogłem znaleźć nic, gdy wpisałem to w Google. Nie wiem, na czym polega tutaj prośba i odpowiedź. Czy żądanie po prostu pobiera dane wejściowe? Gdzie mogę przeczytać więcej na ten temat?

+0

bym konsoli zalogować wielu z tych console.log (odpowiedź). Możesz wtedy zobaczyć, jakie są obiekty. Również - console.log (odpowiedź typeof) również może ci pomóc. – mikevoermans

Odpowiedz

15

request i response są po prostu nazwy, że autor kodu wybrał dać dwóch formalnych parametrów zwrotnego przypisanych do opcji source widgetu autouzupełniania:

autouzupełnianie można dostosować do pracować z różnymi źródłami danych, po prostu określając opcję źródła. Źródłem danych może być:

  • tablicę z danymi lokalnych
  • String, podając adres URL
  • wywołania zwrotnego

Trzeci wariant, wywołanie zwrotne, zapewnia największą elastyczność i można użyć do podłączenia dowolnego źródła danych do autouzupełniania. Callback pobiera dwa argumenty:

  • obiekt żądania, z jednego obiektu o nazwie „termin”, który odnosi się do wartości obecnie w wprowadzania tekstu. Na przykład, gdy użytkownik wpisał "nowe yo" w polu miasta, pojęcie autouzupełniania będzie równe "nowe yo".
  • Wywołanie odpowiedzi, które oczekuje pojedynczego argumentu na , zawiera dane do zasugerowania użytkownikowi. Te dane powinny być filtrowane na podstawie podanego terminu i mogą być w dowolnym z formatów opisanych powyżej dla prostych danych lokalnych (String-Array lub Object-Array z etykieta/wartość/obie właściwości). Jest to ważne, gdy udostępniasz niestandardowe wywołanie zwrotne źródła, aby obsługiwać błędy podczas żądania. Zawsze musisz zadzwonić do wywołania zwrotnego odpowiedzi, nawet jeśli napotkasz błąd. Ten zapewnia, że ​​widget zawsze ma prawidłowy stan.
0

Jest to wyraźnie udokumentowane na stronie autouzupełniania interfejsu użytkownika jQuery.

http://jqueryui.com/demos/autocomplete/

Trzeci wariant, zwrotnych, zapewnia wysoką elastyczność i mogą być używane do łączenia dowolnego źródła danych, by pojawiła. Callback otrzymuje dwa argumenty:

Obiekt żądania, z jedną właściwością o nazwie "termin", która oznacza do wartości aktualnie wprowadzanej w polu tekstowym. Na przykład, gdy użytkownik wpisał "nowe yo" w polu miasta, pojęcie autouzupełniania będzie równe "nowe yo".

Wywołanie zwrotne odpowiedzi, które oczekuje pojedynczego argumentu na , zawiera dane sugerujące użytkownikowi. Te dane powinny być filtrowane na podstawie podanego terminu i mogą być w dowolnym z formatów opisanych powyżej dla prostych danych lokalnych (String-Array lub Object-Array z etykieta/wartość/obie właściwości). Jest to ważne, gdy udostępniasz niestandardowe wywołanie zwrotne źródła, aby obsługiwać błędy podczas żądania. Zawsze musisz zadzwonić do wywołania zwrotnego odpowiedzi, nawet jeśli napotkasz błąd. Ten zapewnia, że ​​widget zawsze ma prawidłowy stan.

+3

Nie sądzę, że jest to wyraźnie udokumentowane. To raczej niepojęte, jeśli nie jesteś przyzwyczajony do semantyki jQuery. –

+0

Istnieje wiele postów na temat SO mówiąc, że takie i takie obiektu jQuery/idea/założenia/what-have-you jest wyraźnie udokumentowane na takiej i takiej stronie. Problem polega na tym, że te bity dokumentacyjne są ukryte w kilku warstwach przekierowania, a co gorsza, adres URL dokumentacji w witrynie jQuery nie jest aktualizowany po kliknięciu. W takim przypadku (z powyższej odpowiedzi), jeśli klikniesz na link wymieniony w odpowiedzi, nie dostarczysz informacji. Powinieneś wtedy kliknąć "Dokumentacja API", a następnie wyszukać "oddzwonienie", aby uzyskać tekst wyżej wymienionej odpowiedzi. – Sonny

24

Nie, request lub response nie są zarezerwowane słowa kluczowe – gdyby były, nie można ich używać jako nazw parametrów funkcyjnych ..

Co się tu dzieje jest dość prosta, a jeśli cokolwiek kiedykolwiek zrobić w węźle zobaczysz wzór. To asynchroniczny JavaScript.

Przekazujesz anonimową funkcję do source. Ta funkcja jest wywoływana za każdym razem, gdy autouzupełnianie wymaga wysłania zapytania do źródła danych (innymi słowy, użytkownik wpisał coś). Parametry funkcji: request i response. request jest po prostu żądaniem autouzupełniania informacji; request.term to zapytanie (co użytkownik wpisał). To zależy od ciebie, jak zaimplementować wyszukiwanie. Może masz lokalną zmienną z możliwościami lub możesz wykonać wywołanie AJAX na serwerze.

Teraz ważna część: jeśli wykonujesz wywołanie AJAX, nie możesz po prostu return wartości z source(), ponieważ funkcja zostanie zwrócona na długo przed zakończeniem połączenia AJAX. Dlatego istnieje parametr response.

to odniesienie do funkcji przekazane do funkcji source(), którą wywołujesz za każdym razem, gdy masz odpowiedź na żądanie. Dzięki magii zamknięć możesz wywołać tę funkcję z poziomu wywołania zwrotnego AJAX.

response (które mogą być nazywane mniej mylący callback) przewiduje szereg strun lub przedmiotów z label i value właściwości. Pokaże te wyniki w rozwijanym menu autouzupełniania.

Kładzenie to wszystko razem:

$('selector').autocomplete({ 
    ... 
    source: function(request, response) { 
     // calculate results for a query. 
     response([{ label: 'Example', value: 'ex' }]); 
    } 
});