jQuery Count/Length Typeahead Remote

У меня есть текстовое поле, в котором я использую автозаполнение через Twitter Typeahead, в частности удаленный пример.

Вот мой код:

var states = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: getStateUrl + "?query=%QUERY",
        wildcard: '%QUERY'
    }
});

var sLength = states.length; // this comes back as undefined

$('#StateName').typeahead({
    highlight: true
}, {
    name: 'states',
    display: 'state',
    source: states,
    limit: 10
}).bind('typeahead:select', function(ev, suggestion) {
    $("#StateId").val(suggestion.id);
});

Если вы не видели комментарий в моем коде, states.length возвращается как undefined. Я пробовал states.index.datums.length, но это тоже возвращается как undefined.

Как мне получить length или count из states с помощью удаленного опережающего ввода в Твиттере?


person Grizzly    schedule 25.08.2017    source источник


Ответы (2)


Как сказал @Sai-nihar-nightraiser, вы пытаетесь установить продолжительность результатов до того, как они будут собраны. Попробуйте это так:

var sLength;

var states = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('state'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
    url: getStateUrl + "?query=%QUERY",
    wildcard: '%QUERY',
    filter: function (statesResults){
        window.sLength = statesResults.length;
        return statesResults;
  }
});

sLength должен быть равен количеству состояний, возвращаемых после запуска typeahead. Я получил информацию из этого сообщения: больше результатов

person slasky    schedule 29.08.2017

Это потому, что я предполагаю, что ваш state.length выполняется до вызова API. Никогда не реализовывал ищейку! Просто предполагая, что это происходит в запросах jQuery ajax, нам придется обрабатывать выходные данные в функции обратного вызова, когда доступ из нее возвращает undefined.

person Nightraiser    schedule 25.08.2017