2016-04-06 5 views
0

Поиск документов Typeahead и Bloodhound Я не нашел что-то полезное, что я делаю неправильно, потому что я получаю предложения только при вводе первой буквы, но я продолжаю печатать слово, и оно не найдено. Я нашел способ читать JSON и фильтровать его на this question, но ничего больше. Кажется, что распознавание слов не работает должным образом. Пожалуйста, кто-то, у кого есть опыт работы с этим фрагментом, может просветить меня по тому, что мне не хватает.Использование typeahead и JSON работает только с первой буквой

JAVASCRIPT

var globalCats = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.whitespace, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    limit: 10, 
    prefetch: { 
     url: 'js/data.json', 
     filter: function (list) { 
      return $.map(list, function (item) { 
      return { 
       nombre: item.nombre, 
       id: item.id, 
       padre: item.padre 
      }; 
     }); 
    } 
    } 
}); 

globalCats.initialize(); 
    $('.typeahead').typeahead({ 
     highlight: true 
    }, 
    { 
     name: 'recomendaciones', 
     displayKey: 'nombre', 
     source: globalCats.ttAdapter(), 
     templates: { 
      empty: [ 
       '<div class="card red white-text"><strong>No hay sugerencias para su búsqueda</strong></div>' 
      ].join('\n'), 
      suggestion: Handlebars.compile('<div class="card"><a href="busqueda.php?catid={{id}}"><strong>{{nombre}}</strong> - Departamento {{padre}}</a></div>') 
      } 
    }); 

HTML

<form class="col s12 z-depth-1"> 
    <div class="row"> 
      <div class="col s12"> 
       <p>Ingrese sus términos de búsqueda o de click en Solicitar Servicio para publicar su requerimiento en sus redes sociales.</p> 
      </div> 
      <div class="input-field col s12 m9"> 
       <input id="buscador" type="text" placeholder="VEAMOS" class="typeahead"> 
      </div> 
    </div> 
</form> 

JSON

[ 
    { 
     "nombre": "Operadores de Taladradoras", 
     "id": 111454, 
     "padre": "Construcción" 
    }, 
    { 
     "nombre": "Operadores de Maquinaria", 
     "id": 454654, 
     "padre": "Construcción" 
    }, 
    { 
     "nombre": "Estilistas", 
     "id": 454678, 
     "padre": "Belleza" 
    } 
] 
+0

Какую версию typeahead вы используете? – whipdancer

+0

@whipdancer Версия 0.11.1 пакетный файл с Bloodhound –

+0

Вам нужно использовать prefetch? вы можете использовать пульт вместо этого? – whipdancer

ответ

0

datumTokenizer неправильно.

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

Bloodhound.tokenizers.obj.whitespace('nombre'), 

Кроме того, я бы рекомендовал изменения в remote вместо prefetch, если вы не уверены, что данные о количестве возвращаемых будут очень мало.

Here is a link к рабочему примеру.

+0

Да, это изменение на datumTokenizer похоже на вещь :) Не могли бы вы рассказать мне, где вы узнали или прочитали об управлении им? Документы на typeahead немного сбивают с толку. –

+0

Это была более кумулятивная вещь. Чтение, тестирование, чтение, поиск, тестирование десятков раз. Мне потребовалось немного, чтобы понять это, потому что мой дефолт теперь должен поместить искомое поле в качестве datumTokenizer, и я не заметил его немедленно с вашей. – whipdancer

Смежные вопросы