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 :

store onSet [Dojo]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut store onSet
    Bonjour,

    J'utilise un dojo.connect sur le onSet d'un itemFileReadStore avec une fonction perso.
    Cette fonction permet de vérifier que les valeurs entrées dans la cellule en édition sont correctes.
    Par contre, si la valeur est incorrect, l'objectif est de redonner le focus à la cellule concernée afin que l'utilisateur corrige sa saisie.
    La fonction vérifie bien et informe correctement l'utilisateur de l'erreur.

    Et c'est là que ça ne fonctionne pas. Je n'arrive pas à bloquer le script afin de revenir sur ma saisie.
    La valeur est malgré tout enregistrée dans la grille même si elle n'est pas enregistrer dans la base.

    Le onSet ne passant pas d'event, je ne peux pas faire de stopEvent.

    Comment faire pour que cela fonctionne ?

    Merci.

  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,

    J'utilise un dojo.connect sur le onSet d'un itemFileReadStore avec une fonction perso.
    La notification onSet ne fonctionne que dans le cadre d'une api data.write. Donc ItemFileWriteStore et pas ItemFileReadStore

    Bon dev,

    ERE

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut
    Arf, erreur de ma part, c'est bien un itemFileWriteStore que j'utilise.
    Désolé.

  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
    Citation Envoyé par bellenthan Voir le message
    Bonjour,
    [...]
    La fonction vérifie bien et informe correctement l'utilisateur de l'erreur.

    Et c'est là que ça ne fonctionne pas. Je n'arrive pas à bloquer le script afin de revenir sur ma saisie.
    La valeur est malgré tout enregistrée dans la grille même si elle n'est pas enregistrer dans la base.

    Le onSet ne passant pas d'event, je ne peux pas faire de stopEvent.

    Comment faire pour que cela fonctionne ?

    Merci.
    Le onSet est déclenché après modification du store. C'est donc déjà trop tard: chronologiquement la fonction applyCellEdit appelle celle de la grid doApplyCellEdit. Or celle-ci met à jour le store (d'où ton onSet) et génère ensuite l'événement de la grid onApplyCellEdit. Enfin la mise à jour graphique de ta grid est déclenchée aussi par le onSet (la grid à un dojo.connect dessus).

    Donc finalement travailler avec le onSet t'es problématique tout simplement parce que le onSet est découplé de la grid.

    Bref que du bonheur

    A ta place je créerais une class MaGrid qui étend la class Datagrid et qui redéfinit la méthode doApplyCellEdit. Dans cette méthode je ferais mes vérifications de saisie (ta fonction actuelle) puis si c'est tout bon j'appellerais la méthode de la class héritée (this.inherited(...)) pour la bascule dans le store.

    Cela te change le dojoType, sauf si tu crées tes grids via JS.

    Bon dev,

    ERE

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut
    Merci beaucoup Emmanuel, c'est clairement beaucoup plus simple comme ça.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut
    Juste une petite précision.
    Si c'est bon, j'appelle la méthode héritée, on est d'accord. Mais cette méthode, c'est bien le doAplyCellEdit de base, où directement le onApplyEditCell ?

    Merci d'avance.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut
    Donc voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                dojo.provide("grilleHC");
                dojo.declare("grilleHC", dojox.grid.DataGrid, {
                    doApplyCellEdit: function(inValue, inRowIndex, inAttrName) {
                        var ok = verifSaisie(inValue, inRowIndex, inAttrName);
                        if (ok)
                        {
                            this.inherited("doApplyCellEdit", arguments);
                        }
                        else
                        {
                            console.log("on doit remettre la cellule en édition");
                        }
                    }
                });
    Donc, ça marche mieux et vérifie bien ma saisie dans la cellule.
    Par contre, je n'ai pas trouvé le moyen de remettre la cellule en édition.
    En effet, une fois sorti de la fonction, le Apply de l'EditManager continue et me "valide" la cellule et du coup, il faut recliquer dessus pour corriger.

    Existe-t'il un moyen de stopper le traitement complètement afin d'éviter de remonter au Apply du EditManager ?
    Je pensais au stopEvent mais je ne sais pas comment récupérer l'évènement déclencheur vu que je ne l'ai pas dans les arguments de la fonction...

    Merci d'avance

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 60
    Par défaut
    Alors j'ai réglé le problème.
    En fait, au lieu de surcharger la méthode doApplyEditCell, j'ai surchargé onKeyDown, qui appelait systématiquement le apply du _EditManager.
    Du coup, j'ai ajouter mon test avec ma fonction de vérification sur les touches ENTER et TAB et si c'est ok, j'applique les modifs, sinon je reste sur la cellule en édition.

    Je ne sais pas si c'est super propre mais ça fonctionne très bien.

    Merci de m'avoir mis sur la piste.

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

Discussions similaires

  1. [sql server] procedure storée, puis-je mettre un try catch
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/08/2005, 15h14
  2. [Debutant][Store procedure][performance] plan d'acces
    Par Carmen dans le forum Débuter
    Réponses: 2
    Dernier message: 11/01/2005, 09h20
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. [Stored Procedure]Only constants, expressions, or variables
    Par nmerydem dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 20/10/2004, 18h29
  5. store proc comme fonction
    Par Bernybon dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 12/03/2004, 21h45

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