IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

négation dans un filtre sur un datastore [Dojo]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Par défaut négation dans un filtre sur un datastore
    Bonjour,

    Pour rechercher un champs correspondant à une certaine valeur dans un datastore la documentation nous indique la syntaxe suivante :

    foo:"bar" , le champ foo est égal à bar

    mais il n'est pas fait mention de la négation qui permet d'obtenir les lignes dont le champ foo n'est pas égal à bar

    D'avance un immense merci à celui qui pourra m'indiquer la marche à suivre

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    La documentation de l'API fetch est très claire: rien n'est imposé quant aux critères de recherche passés dans le paramètre query.

    Néanmoins, l'(*) et le (?) sont fortement suggérés dans l'implémentation. Mais rien quant à une négation.

    Donc si tu utilises un store qui la prend en compte tu peux y accéder sinon tu peux... l'écrire

    Pour info, dans le cas du ItemFileReadStore, la chaine de comparaison passée est convertie en regExp (donc ce n'est pas initialement une regexp) via la fonction dojo.data.util.filter.patternToRegExp

    Bon dev,

    ERE

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Par défaut
    Salut,

    j'avais effectivement peur d'avoir cette réponse suite à mes différentes recherches sur le net.

    J'ai bien vu que l'on pouvait maintenant utiliser directement l'objet regEx dans la requête de la façon suivante :

    foo:new RegExp("/^bar$/")

    mais là, on retombe sur un autre débat qui est qu'il n'y a pas d'opérateur dans les expressions rationnelles pour exclure un mot ou une expression, on peut créer un pattern pour exclure des lettres [^abc] mais pas exclure tout un mot ou une expression (si j'ai bien tout compris).

    J'ai résolu momentanément mon problème en utilisant la fonction fetch pour parcourir le datastore et isoler les lignes qui m'intéressait (merci au passage pour ton excellent tutorial sur les datastores que je recommande vivement à toutes les personnes intéressées par la question) mais la solution me parait néanmoins un peu alambiquée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    monStore.fetch({ query :  {},  
                 onItem : function(item){
                 var test=monStore.getValue(item,"foo");
                  if(test!="bar")
                        maFonction(); 
     
                  }
    });

  4. #4
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re,

    C'est une bizarrerie de cette api: pourquoi ne pas avoir directement autorisé une fonction de filtre qu'on aurait pu passer dans l'objet query ? Ainsi tous les cas les plus tordus auraient été pris en compte. Mystère... Et le pire c'est que cette partie du code ne peut être hérité

    Toujours est il que si tu as besoin uniquement d'un store de type ItemFileReadStore qui offre des fonctions de query étendues avec notamment le NOT alors tu peux utiliser dojox.data.AndOrReadStore

    Bon dev,

    ERE

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 12
    Par défaut
    je viens d'essayer le dojox.data.AndOrReadStore, c'etait exactement ce qu'il me fallait

    la syntaxe query : "!foo:'bar'" fonctionne parfaitement

    un immense merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] utilisation d'une variable dans un filtre sur ouverture
    Par tibjedi dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/08/2012, 09h12
  2. Réponses: 1
    Dernier message: 08/02/2009, 08h19
  3. Filtre sur le nombre de caracteres dans cellule
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/08/2008, 17h19
  4. Réponses: 7
    Dernier message: 14/01/2008, 12h12
  5. Réponses: 6
    Dernier message: 01/06/2006, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo