vue template react bootstrap afterselect javascript twitter typeahead.js typeahead

javascript - template - Twitter Typeahead.js cómo devolver todos los elementos coincidentes dentro de una cadena



typeahead template (1)

Encontré una solución ... el problema era que estaba tan acostumbrado a bootstrap2 typeahead que no entendía el tema datumTokenizer . Si a alguien más le resulta difícil de entender, a continuación le haré una pequeña descripción:

queryTokenizer: matriz de palabras que está consultando, si consulta por ''test abcd'', transformará la cadena en [''test'', ''abcd''] y luego buscará coincidencias con esas dos palabras.

datumTokenizer: conjunto de palabras que se combinarán con queryTokenizer. Cada elemento de su JSON tendrá un conjunto de palabras que deben coincidir.

Así que si tienes una fuente:

[''Buena prueba'', ''mala prueba'']

y consulta por ''est''. Debe hacer que datumTokenizer devuelva una matriz que contenga ''est'', algo como:

[''good'', ''test'', ''ood'', ''od'', ''test'', ''est'', ''st''] para el primer elemento

[''bad'', ''ad'', ''test'', ''est'', ''st''] para el segundo elemento

A continuación se muestra el código que escribí, no sé si es lo mejor para él, pero creo que ayudará de todos modos:

new Bloodhound({ datumTokenizer: function(d) { var test = Bloodhound.tokenizers.whitespace(d.value); $.each(test,function(k,v){ i = 0; while( (i+1) < v.length ){ test.push(v.substr(i,v.length)); i++; } }) return test; }, queryTokenizer: Bloodhound.tokenizers.whitespace, limit: 10, prefetch: { url: ''/lista.json'', ttl: 10000 } });

Por defecto, twitter typeahead.js solo devuelve elementos que coinciden al principio de una cadena, por ejemplo:

fuente: [''tipo'', ''typeahead'', ''adelante'']

Tipo de consulta''

devuelve: ''tipo'' y ''typeahead''

-

consulta: ''adelante''

devuelve: ''adelante''

Quiero que regrese ''adelante'' y ''typeahead''

mi código:

var clients = new Bloodhound({ datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); }, queryTokenizer: Bloodhound.tokenizers.whitespace, limit: 10, prefetch: { url: ''/clients.json'', filter: function(list) { return $.map(list, function(value) { return { name: value }; }); } } }); clients.initialize(); $(''.client'').typeahead(null, { displayKey: ''value'', source: clients.ttAdapter(), minLength: 1, });

Ya hay una pregunta al respecto, pero no entendí la respuesta.