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

AngularJS Discussion :

Custom checkbox ne fonctionne pas dans les grid ui-grid de Angularjs


Sujet :

AngularJS

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut Custom checkbox ne fonctionne pas dans les grid ui-grid de Angularjs
    Salut,
    j'ai implémenté une grille avec deux niveaux de regroupement. Vous pouvez voir le plunker ici:

    http://plnkr.co/edit/jY0lH1FsczgR3jrQH3iL?p=preview

    Je suis confronté à deux problemes

    1) quand j'ouvre le premier niveau de regroupement (par exemple N ° CF = 1000 (4)) et quand Je clique sur la checkbox sur le deuxième niveau de regroupement, le gestionnaire "manageClick" est appelé et je peux voir dans les logs que row.entity.checkbox = undefined. C'est surprenant parce que quand j'inspecte la row dans Firebug il a une entité entity et dans entity, je peux voir la propriété checkbox. Ceci n'arrive pas dans mon application, mais seulement dans le plunker.

    2) Mon deuxième problème (que je vois dans mon application mais pas dans le plunker en raison du premier problème) est quand j'ouvre juste le premier niveau de regroupement (par exemple N ° CF = 1000 (4)) et quand je clique sur la checkbox dans le deuxième niveau de regroupement, les enfants sont bien sélectionnés (ce qui est géré dans ma fonction "manageClick") mais le deuxième niveau de regroupement que je viens de cocher, devient non sélectionné alors qu'il devrait rester sélectionné.

    Merci d'avance pour vos réponses

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Bonjour,

    J'ai trouvé une solution. A la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          { name: 'checkbox',field: 'checkbox', displayName: 'checkbox' , width: '2%' , 
    cellTemplate: 
    '<div  > <INPUT ng-if="row.treeLevel != 0" type="checkbox" 
    ng-model="row.entity.checkbox" ng-click="grid.appScope.manageClick(row)" ></div>' },
    J'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         { name: 'checkbox',field: 'checkbox', displayName: 'checkbox' , width: '2%' , 
    cellTemplate: 
    '<div  > <INPUT ng-if="row.treeLevel != 0" type="checkbox" 
    ng-model="row.checkbox" ng-click="grid.appScope.manageClick(row)" ></div>' },
    En fait, j'ai remplacé la valeur de ng-model de ma checkbox de row.entity.checkbox par row.checkbox. Je ne sais pas si c'est un hack

    Je ne sais pas pourquoi, quand je déployais le deuxième niveau de grouping, l'entité row.entity était rafraichie et je perdais la valeur de row.entity.checkbox. Savez vous pourquoi ?

  3. #3
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    C'est au premier chargement de ta variable row.entity.checkbox que c'est undefined.
    Lorsque tu déclare un ng-model, cela veut dire simplement "lie moi cette variable à mon composant" et non pas "initialise la variable".
    Autrement dit, un $scope.$watch est ajouté sur la variable déclarée.

    Si cette variable n'est pas initialisée, elle sera undefined lors du chargement de ta page.
    Dans le cas du checkbox, il faut qu'un changement survienne pour qu'elle soit initialisée.

    [EDIT]un exemple sur jsbin[/EDIT]

    lis la doc sur le scope (+ $digest et $apply).


    De plus, je ne sais pas pourquoi tu utilise la fonction some sur le tableau children.
    Selon la doc JS :

    La méthode some() teste si certains éléments du tableau passent le test implémenté par la fonction fournie.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Bonjour Slim et merci pour ta réponse

    normalement quand je clique sur ma checkbox "row.entity.checkbox" devrait être initialisé à true et je devrais le voir dans les logs, alors que je vois une valeur undefined.

    Quant à la fonction some, elle me permet d'arréter une boucle quand le traitement est considéré comme fini en renvoyant la valeur true, ce que ne fait pas la fonction foreach

    Comme j'ai trouvé la solution, je marque cette discussion comme résolue

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/07/2010, 06h26
  2. [AC-2007] CurrentDB ne fonctionne pas dans les états
    Par Nadiine dans le forum Access
    Réponses: 9
    Dernier message: 17/06/2009, 08h53
  3. Réponses: 6
    Dernier message: 22/05/2007, 09h55
  4. Réponses: 9
    Dernier message: 05/02/2007, 18h08
  5. [FTP] fopen qui ne fonctionne pas dans tous les contextes ..
    Par Christophe Charron dans le forum Langage
    Réponses: 6
    Dernier message: 15/06/2006, 10h25

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