Typeahead.js - la Recherche dans de multiples valeurs de propriété
Voir l'exemple ci-dessous.
JSFiddle: http://jsfiddle.net/R7UvH/2/
Comment puis-je faire typeahead.js (0.10.1 l'a) recherche de correspondances dans plus d'une valeur de propriété? Idéalement, dans toute l' data
(data.title
, data.desc
et dans tous les data.category[i].name
)
datumTokenizer: function(data) {
//**search in other property values; e.g. data.title & data.desc etc..**
return Bloodhound.tokenizers.whitespace(data.title);
},
Ensemble de l'exemple:
var data = [{
title: "some title here",
desc: "some option here",
category: [{
name: "category 1",
}, {
name: "categoy 2",
}]
},
{
title: "some title here",
desc: "some option here",
category: [{
name: "category 1",
}, {
name: "categoy 2",
}]
}];
var posts = new Bloodhound({
datumTokenizer: function(data) {
//**search in other property values; e.g. data.title & data.desc etc..**
return Bloodhound.tokenizers.whitespace(data.title);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: data
});
posts.initialize();
$('#search-input').typeahead({
highlight: true
}, {
name: 'Pages',
displayKey: 'title',
source: posts.ttAdapter(),
templates: {
header: '<h3>Pages</h3>'
}
});
Vous devez vous connecter pour publier un commentaire.
Typeahead 0.10.3 ajoutée "soutien pour objet des générateurs de jetons de plusieurs propriétés segmentation."
Donc, votre exemple, devient
Cependant, je ne pense pas que cela fonctionnera pour les propriétés imbriquées à l'intérieur, c'est le
data.category
objet dans votre cas.Comme une note de côté, si vous utilisez prefetched de données, assurez-vous de vider le local de stockage des premiers, sinon le nouveau générateur de jetons ne prendra pas effet (Parce que
datumTokenizer
est utilisé lors de l'ajout de l'index de recherche, et si des données sont déjà présentes danslocalStorage
, puis l'index de recherche ne sera pas mis à jour). J'ai été coincé sur depuis un certain temps!prefetch: { cache: false, ... }
return Bloodhound.tokenizers.whitespace(data.title)
retourne un tableau de chaînes de caractères.Donc, au lieu de retourner une valeur: l'enregistrer (et vos autres valeurs), puis de les enchaîner et de retour que de la valeur...
J'ai mis en place une solution ici:
http://jsfiddle.net/Fresh/4nnnG/
Que vous avez une source de données, vous devez créer des jeux de données individuels afin de vous permettre de match sur de multiples propriétés des données. par exemple,