Sto implementando la ricerca typeahead utilizzando typeahaead.js ma come tipo nella casella di ricerca typeahead, nel menu di scelta dei suggerimenti ogni record viene due volte. Ho controllato l'origine dati (ovvero la chiamata POST api), ha solo un nome univoco records.where sto sbagliando? Qualsiasi aiuto o collegamenti pertinenti.Record duplicati in ricerca typeahead
Anche il controllo non sta per duplicatore.
Numero simile discussed here, ma nessuna soluzione è presente.
<div id="bloodhound">
<input class="typeahead" type="text" placeholder=" Search">
</div>
<script>
var result = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: 'https://api1.com/idocs/api',
wildcard: '%QUERY',
rateLimitWait: 300 ,
transport: function (opts, onSuccess, onError) {
var url = opts.url;
$.ajax({
url: url,
type: "POST",
success: onSuccess,
error: onError,
});
},
filter: function (data) {
if (data) {
return $.map(data, function (object) {
return data.data.results.data;
});
}
}
},
dupDetector: function (remoteMatch, localMatch) {
return remoteMatch.id === localMatch.id;
}
});
result.initialize();
$('input').typeahead(null, {
name: 'result',
displayKey: 'id',
source: result.ttAdapter(),
templates: {
empty: ['<div>', 'no results found', '</div>'],
suggestion: function (data) {
return '<p>' + data.basicinfo.object_name + '</p>';
}
},
});
È possibile creare un jsbin o jsfiddle per riprodurre l'errore? Se no, puoi refactoring il tuo codice per rimuovere tutto ciò che non è essenziale (templates, hint, bind, etc) e vedere cosa sta succedendo? Console.log nella funzione filtro per vedere cosa sta facendo? – whipdancer
inserisce un console.log nella funzione filtro - filter: function (data) {console.log (data); if (data) { return $ .map (dati, funzione (oggetto) {console.log (oggetto); console.log (data.data); console.log (data.data.results); console.log (data.data.results.data); return data.data.results.data; }); } } – whipdancer
La funzione di filtro come quella che hai non ha senso per me. Dovresti avere a che fare con un oggetto all'interno della funzione mappa, ma invece lo ignori per "dati". – whipdancer