Twitter Typeahead с удаленным json не работает

Моя инициализация twiter typeahead:

 var cityList = new Bloodhound({
            datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            remote: {
                url: $('#citySearchInput').attr('data-src')+'?query=%QUERY',
                wildcard: '%QUERY',
                dataType: "json",                    
                ajax : {                       
                    type: "GET"
                }
            }
        });
     $('#citySearchInput').typeahead({
                minLength: 2,
                highlight: true,
                hint: true
            }, {
            display: 'value',
            source: cityList,
            limit:25,
            valueKey: 'query',
            templates: {
                empty: function(data){
                    console.log(data);
                    return 'empty';
                },
                suggestion:  function(data) {
                    console.log(data);
                    return '<p><a href="'+data.link +'">' + data.value + '</a></p>';
                }
            }
        });

Это работа с ответом от бэкэнда как:

[{"link":"\/en\/forecast\/Iran\/Ostan-e-Lorestan\/Defkandar","value":"Defk\u0101ndar, Ost\u0101n-e Lorest\u0101n(Iran)"},{"link":"\/en\/forecast\/Iran\/Ostan-e-Lorestan\/Defkundar","value":"Defk\u016bndar, Ost\u0101n-e Lorest\u0101n(Iran)"}]

Но когда возвращается больше данных, например 8 элементов - всегда пишите "пусто" и в данных предложения 0. Я исправил это после установки лимита в js с 25 до 100, но я не думаю, что это правильный путь.


person moledet    schedule 29.12.2015    source источник


Ответы (1)


В моем случае бэкенд ограничен возвратом 25 элементов. Я установил для typeahead значение limit:25, потому что это кажется довольно разумным. Я заметил, что у меня отображались результаты, когда в JSON было возвращено менее 25 результатов, но ничего не происходило, когда в JSON были все 25 элементов.

Я добавил пустой шаблон после прочтения вашего вопроса, и он срабатывал каждый раз, когда у меня было 25 результатов. Может ли быть ошибка в коде? Я не исследовал это.

Я увеличил ограничение до 50 для Typeahead, зная, что серверная часть гарантирует, что я никогда не увижу больше 25. Теперь все работает, как и ожидалось.

Это в основном мой пост, который пытается подчеркнуть, что ваш обходной путь эффективен в ситуации, когда бэкэнд обеспечивает ограничение.

person Bryan    schedule 26.03.2017