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

Flex Discussion :

CollectionChanged et addAll() [Flex3]


Sujet :

Flex

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut CollectionChanged et addAll()
    Bonjour,

    Quelqu'un sait-il comment faire pour ne recevoir qu'une seule notification de type CollectionEventKind.ADD lorsque l'on ajoute plusieurs éléments à une liste avec addAll().

    Imaginons une liste d'objets totos. Sur modification de cette liste, on fait un traitement d'affichage.
    Si on ajoute 10 objets trucs à cette liste avec un addAll(maListede10trucs), il semble que l'on déclenche 10 évènements de type ADD. Et du coup, on va déclencher 10 fois le traitement d'affichage.

    Je ne comprends pas pourquoi cela ne déclenche pas qu'un seul et unique ADD avec la liste des éléments modifiés dans le event.items (qui est pourtant bien de type Array et donc adapter à cela).

    Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Salut,

    Est-ce qu'au moment où tu récupères l'event tu peux savoir si l'élément ajouté est le dernier de la liste à ajouter ?
    L'évènement est effectivement dispatché à chaque ajout, car à chaque ajout, la liste a changé.
    L'idéal serait de trouver l'équivalent d'un 'updateComplete'.
    C'est pour ça si tu as moyen de savoir si l'élement ajouté n'est pas le dernier de la liste des objets à ajouter, tu peux intercepter les traitements, incluant la propagation de l'évènement.
    N'oubliez pas avant de poster :

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    Salut Krazymins,

    Coté 'écouteur', non je ne peux pas le savoir (ce qui me parait plutôt logique, celui qui écoute les évenements n'ayant, a pirori, pas de raison de savoir à l'avance ce qui va être ajouter...sinon c'est pas la peine qu'il écoute :p).

    Coté 'celui qui ajoute les éléments', en effet je peux le savoir qu'un élément que j'ajoute n'est pas le dernier. Mais je ne peux pas stopper la remontée des events sur la liste en attendant le dernier, car cela signifierait que celui qui écoute ne recevrait qu'une seule notification (ce que je veux) mais avec uniquement le dernier élément ajouté dans le event.items (et il me les faut tous).

    C'est 'étrange' ce problème. Ce dont j'ai besoin me semble être 'basique', et l'artillerie de CollectionChangeEvent avec son event.items (Array) me laisse à penser que c'est prévu pour... et pourtant non.

    Charles.

  4. #4
    Membre averti Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Points : 310
    Points
    310
    Par défaut
    Bonjour, si je comprends bien ton problème ta liste a laquelle tu ajoutes des éléments joue sur une mise à jour d'un affichage quelconque.

    pour quoi ne pas dissocier les deux éléments c'est à dire enlever le binding ou que sais et dès que tu sais que ta liste est bien construite tu lances un eventChangeProperties de ta liste et puis changer l'affichage à ce moment là

    c'est juste une hypothèse

    Bon courage
    Samy
    http://www.m-ataf.com (En cours de construction)

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Citation Envoyé par clemoigno Voir le message
    Salut Krazymins,

    Coté 'écouteur', non je ne peux pas le savoir (ce qui me parait plutôt logique, celui qui écoute les évenements n'ayant, a pirori, pas de raison de savoir à l'avance ce qui va être ajouter...sinon c'est pas la peine qu'il écoute :p).
    Bien sûr, je me suis mal exprimé. Ce que je voulais dire c'était : est ce que par un quelconque moyen tu peux savoir si tu as le dernier de la liste (en envoyant tes propres event par exemple).

    Donc du coup est-ce que tu ne peux pas envoyer ton propre event au moment où le dernier élément est ajouté ? (et ainsi passer dans ton event les paramètres dont tu as besoin....)
    N'oubliez pas avant de poster :

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    Merci à vous deux pour vos suggestions.
    Je m'en suis tiré mais je suis pas franchement satisfait de la solution. Surtout qu'elle pourrait, me semble-t-il, faire partie intégrante du SDK.

    Je lève mes propres CollectionEvent suite à des add() et addAll() sur ma collection.
    J'utilise un Kind particulier ('SPECIAL_ADD').

    J'écoute ensuite les CollectionEvent et si c'est un SPECIAL_ADD, je fais le traitement qui me va. Si c'est un ADD tout court, je ne fais rien (en gardant à l'esprit que tous mes addAll() continue de générer autant de CollectionEvent de type ADD...).

    Avec quelques exemples cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    _listeDatesSelectionnees.addAll(listeDateAAjouter);
    var event:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE, false, false, "SPECIAL_ADD");
    event.items = listeDateAAjouter.toArray();
    _datesSelectionnees.dispatchEvent(event);
    Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (event.kind == "SPECIAL_ADD"){
      this.ressource.chargePages(new ArrayCollection(event.items));
    }
    else if (event.kind == CollectionEventKind.ADD){
      // Ici du coup on fait rien 
    } else if (event.kind == CollectionEventKind.REMOVE){
     // ...
    }
    Ce qui m'ennuie avec cette méthode, c'est que je suis obligé de lever manuellement l'événement sur chaque ajout simple ou multiple d'objet dans ma liste. Je vais faire du coup deux méthodes ajoutSimple / ajoutMultiple qui géreront elle-même ces levées d'événements pour faciliter la maintenance mais si quelqu'un passe derrière et à le malheur d'utiliser simplement les méthodes add(), addAll() de la collection....Ce sera foutu.

    Merci pour vos suggestions.

    Charles.

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

Discussions similaires

  1. [MVVM] implémentation de l’évènement CollectionChanged de ObservableCollection
    Par maradona_9 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 05/10/2012, 21h19
  2. ObservableCollection CollectionChanged ?
    Par mickeybond dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 02/03/2012, 13h23
  3. ObservableCollection<T>.CollectionChanged à travers un ListCollectionView ?
    Par Chekov dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/11/2009, 08h47
  4. comment créer une methode addAll()
    Par rimra dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2009, 18h40
  5. [erreur] addAll en erreur.
    Par nebule dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2006, 10h31

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