2016-04-06 14 views
0

Typeahead ve Bloodhound dokümanlar için arama yapma Yardımcı olmadığım bir konuda yardımcı bir şeyler bulmadım çünkü ilk harfi yazdığımda yalnızca öneriler alıyorum, ancak yazmaya devam ediyorum. kelime ve hiçbir eşleşme bulunamadı. JSON'u okuma ve this question'da filtrelemenin bir yolunu buldum, ama başka bir şey yok. Kelime tanıma, amaçlandığı gibi çalışmıyor gibi görünüyor. Lütfen bu snippet ile deneyime sahip biri, eksik olduğum şey hakkında beni aydınlatabilir.Tipeahead kullanarak ve JSON yalnızca ilk harf çalışır

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

Hangi typeahead sürümünü kullanıyorsunuz? – whipdancer

+0

@whipdancer Sürüm 0.11.1 Bloodhound ile paket dosyası –

+0

Prefetch kullanmak zorunda mıyım? bunun yerine uzaktan kullanabiliyor musunuz? – whipdancer

cevap

0

datumTokenizer yanlıştır.

Bu bölümü çok iyi anlamıyorum, ancak denediğim tüm varyasyonlarda işe yarayan şeyleri buldum. Jetonlayıcının döndürdüğünüz nesneyi referans alması gerekir. Yani, bu kadar varsayılan dizgeciklerini değiştirin:

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

Ayrıca, döndürülen miktarı veriler çok küçük olacağından emin olmadıkça remote yerine prefetch değişen öneriyoruz. Çalışan bir örneğe

.

+0

evet datumTokenizer'deki bu değişiklik gibi görünüyor :) bana bunu nasıl öğrendiniz ya da okuyup okumayı öğrendiniz? Tyeahead üzerindeki dokümanlar kafa karıştırıcı. –

+0

Daha çok kümülatif bir şeydi. Okumak, test etmek, okumak, araştırmak, onlarca kez test etmek. Seninkiyle bir kaç tane bulmam gerekiyordu çünkü şimdi benim varsayılanım datumTokenizer olarak aranan alanı koymak ve seninle hemen farketmemiştim. – whipdancer