2010-09-06 12 views
22

Chcę zaimplementować funkcję "wyszukiwania na żywo" lub "sugestii wyszukiwania" w aplikacji internetowej korzystającej z platformy Dojo. Byłoby to podobne do sposobu, w jaki Google i Bing wyszukuje mecze podczas wpisywania: kiedy wpiszesz pole wyszukiwania, poniżej pojawi się lista potencjalnych dopasowań. Wyszukiwania będą wykonywane po stronie serwera, a wyniki będą przesyłane z powrotem do przeglądarki przy użyciu AJAX.W jaki sposób można zastosować sugestie dotyczące wyszukiwania na żywo/wyszukiwania przy użyciu narzędzia Dojo?

Czy ktoś wie o dobrym sposobie wdrożenia tego za pomocą Dojo?

Oto niektóre potencjalne opcje:

  • Wbudowany widget dijit.form.ComboBox
    ten posiada bardzo podobną funkcjonalność, ale ja tylko widział kiedyś o ograniczonych zestawów danych. Przykłady zawsze używają małych list (takich jak 50 stanów w USA) i wstępnie ładują cały zestaw danych do filtrowania po stronie klienta. Jednak przypuszczam, że mógłbym podłączyć go do dojox.data.JsonQueryRestStore do wyszukiwania po stronie serwera - czy ktoś może potwierdzić, czy to działa?

  • QueryBox http://marumushi.com/code/querybox/
    Ta implementacja głównie spełnia swoje zadanie, ale ma kilka drobnych błędów i nie wygląda jak to utrzymuje. Musiałbym wprowadzić kilka poprawek na kodzie przed jego użyciem.

  • Medryx http://blog.medryx.org/2008/09/10/dijitsearch-part-2/
    To wygląda również jak spełnia swoje zadanie, ale jest to opisane jako „alfa” na poziomie kodu i link do kodu wydaje się być uszkodzony ...

Prawdopodobnie mógłbym wykonać jedną z powyższych prac, ale chciałbym się dowiedzieć, czy są jakieś lepsze alternatywy.

+0

Cześć. Próbuję zrobić to samo i zobaczyłem ten post. Czy masz szansę na opublikowanie kodu dla Dojo 1.5/6? – Ayyoudy

Odpowiedz

11

I wdrożone go 5 lat temu, gdy był w Dojo 0,2:

Podczas gdy kod jest stare, to jest trywialne, i mam nadzieję, że to daje pomysły na zaatakuj to. Szorstki szkic:

  • Dołączanie programu obsługi zdarzeń do pola tekstowego, które jest wyzwalane na zmiany — użytkowania „onkeyup”, aby wykryć zmiany w polu tekstowym.
  • Poczekaj, aż użytkownik przestanie pisać, ustawiając timer w programie obsługi zdarzeń, jeśli nie jest jeszcze ustawiony. 200-500 ms to dobry czas oczekiwania.
    • Timeout odgrywa podwójną rolę:
      • To przepustnice nasze żądania do serwera, aby zapobiec przeciążeniu.
      • Odgrywa on nasze postrzeganie czasu i nasze nawyki pisania.
  • Jeśli nasz czas oczekiwania jest do góry, a nie czekać na serwer ⇒ serwerze wysłać ciąg mamy tak daleko.
  • Jeśli nadal czekamy na serwer, anuluj żądanie i zapytaj ponownie.
    • Ta część jest specyficzna dla aplikacji: nie chcemy przeciążać serwera, a czasami serwer nie radzi sobie dobrze z uszkodzonymi połączeniami.
    • W tym przykładzie nie anuluję wywołania XHR, ale poczekaj, aż zakończy się ono przed wysłaniem nowego żądania.
  • Serwer odpowiada odpowiednimi wynikami, które są natychmiast wyświetlane.

W poście blogu zaimplementowałem go jako widget. Oczywiście dokładne opakowanie zależy od Ciebie.

+0

Dzięki! Twoje rozwiązanie jest zadziwiająco bliskie temu, czego szukałem. Obecnie piszę zaktualizowany skrypt do wersji Dojo 1.5 i prawdopodobnie opublikuję go tutaj, gdy skończę. – gutch

+0

Proszę. Jest to przydatny fragment kodu, który mogę wykorzystać sam. ;-) –

+0

Wiedziałem, że to stary post. czy możesz podzielić się najnowszym kodem? Obecnie pracuję nad tą samą funkcją przy użyciu dojo. Doceniam to. –

Powiązane problemy