2010-05-10 6 views
4

Vous trouverez ci-dessous un exemple d'un filtre de sélection rempli de données utilisateur. Mon but est d'effectuer une correspondance wilcard sur les valeurs affichées. Par exemple, si l'utilisateur tape 'fils', les résultats de la liste déroulante seront "homer simpSON" et "carl calSON" Par défaut, la correspondance ne sera que sur le début de l'étiquettecomment dojo.FilteringSelect peut-il être configuré pour correspondre aux valeurs génériques?

J'ai essayé de changer dijit .byId (« userselect »). searchAttr, mais la mise à quoi que ce soit, mais une chaîne provoque le comportement erronious.

<input id="userselect"> 

<script type="text/javascript"> 
    dojo.require("dijit.form.FilteringSelect"); 
    dojo.require("dojo.data.ItemFileReadStore"); 

    var user_data = { 
     "itentifier":"user_id", 
     "label":"label", 
     "items":[ 
      {"first_name":"Waylon","last_name":"Smithers","label":"Waylon Smithers","user_id":7} 
      ,{"first_name":"Carl","last_name":"Carlson","label":"Carl Carlson","user_id":6} 
      ,{"first_name":"Homer","last_name":"Simpson","label":"Homer Simpson","user_id":4} 
      ,{"first_name":"Lenny","last_name":"Leonard","label":"Lenny Leonard","user_id":5} 
      ,{"first_name":"Montgomery","last_name":"Burns","label":"Montgomery Burns","user_id":8} 
      ] 
     }; 

    dojo.addOnLoad(function() { 
     var userStore = new dojo.data.ItemFileReadStore({ 
      //url: "/user/lookup", 
      data: user_data 
     }); 
     var filteringSelect = new dijit.form.FilteringSelect({ 
      id: "userselect", 
      name: "userselect", 
      store: userStore, 
      searchAttr: 'label' //["first_name", "last_name", "oasis"] 
     }, 
     "userselect"); 
    }); 
</script> 

Répondre

0

Jetez un oeil à queryExpr

+0

queryExpr fonctionne, mais maintenant le comportement correspondant est erroné: Supposons que je commence à taper 'simpson', le le premier caractère 'correspond maintenant à' Waylon Smithers 'Le champ combo se remplit avec' Waylon Smithers ', mais la mise en surbrillance est fausse, car je continue à taper' imson 'il fusionne dans le texte sélectionné en tant que "wimpson" et ensuite Est-ce un bug dans le dojo? – AntiEgo

+0

Pour autant que je comprends vous devez le définir sur * $ {0}. L'avez-vous fait? – kalkin

5

Vous devez définir queryExpr et mis autoComplete-false

var filteringSelect = new dijit.form.FilteringSelect({ 
    id: "userselect", 
    name: "userselect", 
    store: userStore, 
    searchAttr: 'label', 
    queryExpr: '*${0}*', 
    autoComplete: false 
},"userselect"); 

Dojo documentation queryExpr:

Ceci indique que la requête est envoyée au magasin de données, en fonction de ce que l'utilisateur a tapé . La modification de cette expression va modifier si les résultats ne sont que des correspondances exactes, une correspondance "commençant par", etc. motif d'expression de requête dojo.data. $ {0} remplacera le texte utilisateur . * est utilisé pour les caractères génériques.

${0}* signifie "commence par"
*${0}* signifie "contient"
${0} signifie "est"