2015-06-12 22 views
9

Używam wtyczki twitter typeahead (typeahead.js 0.11.1) z wywołaniem ajax, która działa, ale daje dziwne zachowanie, gdy liczba wyników ajax jest mniejsza niż limit (domyślny limit to 5, którego nie określiłem w wywołaniu typu). Oto jak mam go ustawić:twitter typeahead ajax wyniki nie wszystkie wyświetlane

var limit = 6; 

populate_typeahead = function() { 
    $('.typeahead').typeahead('destroy'); 
    $('.typeahead').typeahead({ 
     hint: true, 
     highlight: true, 
     minLength: 1 
    }, 
    { 
     source: ajaxquery, 
    }); 
}; 

var ajaxquery = function(query, syncresults, process) { 
     return $.ajax({ 
      url: $(this)[0].$el.closest('span.twitter-typeahead').find('input:last').data('mahiFindByPath'), 
      type: 'get', 
      data: {search_string: query, limit: limit}, 
      dataType: 'json', 
      success: function(json) { 
       return typeof json.options == 'undefined' ? false : process(json.options); 
      } 
     }); 
    }; 

Rzeczywisty przykład, który jest przyczyną mnie problemu, to wpisując „new do” w polu tekstowym, które zwraca następujący json.options:

[ 
    'new to add to g1', 
    'new to be in grp1 then remove from grp', 
    'new to drag', 
    'new to assign' 
] 

Ale jedyną sugestią, która się pojawia jest "nowe, aby dodać do g1", kiedy wszystkie 4 powinny pokazać. Jeśli będę kontynuować pisanie "new to d", pojawi się propozycja "new to drag". Jeśli wpiszesz tylko "nowy", otrzymam pełne 5 sugestii, w tym większość z powyższych!

Jeśli zmienię var limit = 5;, to wywołanie ajaxowe tylko wróci do co najwyżej 5 wyników, a lista sugestii nie pojawi się w ogóle, dopóki nie otrzymam "nowego do d", tj. "Nowy" nie daje żadnych sugestii. To sprawia, że ​​myślę, że ma to związek z liczbą wyników ajaxowych, które są mniejsze lub równe ograniczonemu limitowi. Aby przetestować moją teorię, wrzuciłem 5 nic nie znaczących elementów do tablicy json.options, więc zawsze było więcej niż 5 wyników i wszystko działało zgodnie z oczekiwaniami - tylko nie chcę zawsze mieć bezsensownych sugestii na dole mojej listy. Każda rada bardzo doceniona!

Odpowiedz

21

Miałem podobny problem. Wygląda na to, że jest to błąd w wersji 0.11.1 Typeahead. Wypróbuj rozwiązanie tutaj: https://github.com/twitter/typeahead.js/pull/1212 i sprawdź, czy to działa.

Konkretna zmiana jest taka: https://github.com/per-nilsson/typeahead.js/commit/387290b1e70be0052c6dd9be84069f55d54a7ce7

+0

Tak że rozwiązany dzięki! –

+0

Wow, to działa dla mnie, dziękuję – danisupr4

+0

Witam. Myślę, że mam ten sam problem z wersją 0.11.1 Typeahead. Nie wszystkie wyniki zwrócone z połączenia ajax są wyświetlane na liście sugestii. Podany link nie wydaje się działać dłużej. Czy możesz wskazać mi, gdzie mogę znaleźć poprawkę dla tego problemu? Dzięki. – Doug

0

Idąc za radą agustaf. Używam twitter-ring -head gem. Stworzyłem widelec i natknąłem się na wersję 1.0.1, która naprawia ten błąd dla mnie, który może być taki sam lub istotny.

W moim przypadku miałem dwa wyniki ze zdalnego źródła, ale tylko jeden z dwóch został użyty do sugestii.

Zrobiłem żądanie ściągnięcia - ale nie jestem pewien, czy zostanie scalony. Jednak w przypadku przyszłych railsów użytkownicy, którzy mogą to zobaczyć, wykorzystują mój fork, a konkretnie gałąź i.

dodać do gemfile

gem 'twitter-typeahead-rails', :git => "git://github.com/pitops/twitter-typeahead-rails.git" , :branch => "bump_version_to_1.0.1"