Twitter typeahead 0.1 с ищейкой не может заставить предварительную выборку работать с URL

У меня есть этот код в JS, который работает очень хорошо.

  var values = new Bloodhound({
      datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.num); },
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      remote: '/url/that/returns/json'
   });

Но, поскольку мне это нужно только один раз, я изменил его на предварительную выборку, как показано ниже:

  var values = new Bloodhound({
      datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.num); },
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      prefetch: {url: '/url/that/returns/json'}
   });

Это вызывает ошибку ("TypeError: a is undefined") в typeahead.js. Что мне нужно изменить, чтобы эта функция заработала?

РЕДАКТИРОВАТЬ: возвращаемый json, если я посещаю URL-адрес в своем браузере:

[{"name":"MyName","id":"100","code":"CODE"}]


person Jeremy    schedule 26.02.2014    source источник
comment
Возможно, ваша конечная точка не возвращает действительный JSON. Смоделировав запрос AJAX, я смог заставить работать пример: jsfiddle.net/2Cres/5   -  person Brandon Boone    schedule 26.02.2014
comment
@BrandonBoone Я вставил, какой json возвращает мой URL. Взгляните.   -  person Jeremy    schedule 26.02.2014
comment
@BrandonBoone Используя вашу ссылку, я смог диагностировать проблему. Огромное спасибо.   -  person Jeremy    schedule 26.02.2014


Ответы (1)


Это было вызвано тем, что мой datumTokenizer искал поле с именем num:

... return Bloodhound.tokenizers.whitespace(d.num)

Но в моем JSON такого поля не было. Я понятия не имею, почему это работало с удаленным, но не работало в предварительной выборке. Исправление состояло в том, чтобы заменить d.num на d.name.

person Jeremy    schedule 26.02.2014
comment
Хороший улов! Я пытался реализовать ваш JSON и возвращал числа, которые были у меня в исходном примере. Оказывается, предварительная выборка использует локальное хранилище для уменьшения трафика на ваш веб-сервер (jsfiddle.net/2Cres/25). ). Так что будьте осторожны, если вы завершите тестирование и обнаружите, что ваши данные устарели. - person Brandon Boone; 26.02.2014
comment
Я тоже заметил это, что немного расстроило. Я начал добавлять случайные числа в конец URL-адреса, что, вероятно, объясняет, почему он увеличился до 25 экземпляров :) - person Jeremy; 26.02.2014
comment
Вы можете изменить настройки предварительной выборки на ttl: 0, что всегда будет извлекать свежий набор данных. - person Carey Estes; 03.07.2014
comment
У меня такая же проблема. Можете ли вы опубликовать пример вашего файла json, токенизатора и фильтра в предварительной выборке? Я до сих пор не понимаю, как работает именование. - person Carey Estes; 03.07.2014