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 :

Event & Handler


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut Event & Handler
    Bonjour,

    Je débute dans le domaine Flex et j'ai encore un peu de mal à comprendre le fonctionnement de certains aspects de Flex dont les évènements. Voici mon problème :

    Je réalise une application composée de 20 à 30 écrans. Sur mon écran principal, j'ai un champs de saisie qu'on retrouve sur toutes les vues. Ce champs détermine l'ensemble des données chargées par la suite. Il faut donc que si cette valeur change cela impacte l'ensemble des vues.

    J'avais dans un premier temps pensé réaliser cela à l'aide d'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Dans ma classe tout en haut
    [Bindable]
    function set monTextField(newValeur:String):void {
       this.maValeur = newValeur;
       dispatchEvent(new Event('valeurChanged'));
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // dans mes vues impactées dans le creation complete
    function onCreationComplete(event:Event):void {
       this.addEventListener("valeurChanged", maFonctionDeChargementDeDonnees, true);
    }
     
    public function maFonctionDeChargementDeDonnees(event:Event):void {
       // Mon traitement
    }
    Cela ne semble pas marcher, mais :
    - L'évènement est créée et lancée.
    - Le listener est créé également.

    Ma question est donc, comment puis-je notifier mes vues (placés dans un viewstack) sur l'écran principal que la valeur du champs de saisie a changé?

    PS :
    - Si possible évitons les FlexGlobals.topLevelApplication.monComposant.autrecomposant...
    - Aucun framework ne peut être mis en place. (Contraintes imposées non négociables)

    Merci d'avance,

    Zenklys

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 147
    Par défaut
    il est nécessaire que chacune de tes vues écoute l'événement 'valeurChanged', c'est tout !

  3. #3
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut
    Re,

    Et bien, j'ai pu faire un petit tour sur les tutoriels. J'ai déjà avancé dans mon problème sans en trouver la solution.

    Capturing
    A priori, quand un évènement est déclenché, il part du plus haut élément hiérarchique au niveau affichage pour descendre jusqu'au composant qui a initié l'évènement.

    Bubbling
    Ensuite une fois que l'évènement est arrivé au niveau du composant à l'origine de l'évènement, il remonte vers le composant hiérarchique le plus haut.


    Dans mon cas, le souci est donc :
    - L'évènement est déclenché dans le composant principal tout en haut.
    - Mes vues se situent en dessous et non comprises dans la portée de l'event.

    Comment dire à mes vues qu'il faut qu'elle s'actualisent?

  4. #4
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Bonjour,

    dans les creation complete des vues il ne faut pas ajouter un écouter sur elles-mêmes mais sur l'écran principal.

    changer this par mainWindow à récupérer dans le constructeur par exemple.

  5. #5
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Par défaut
    Re,

    Merci de la réponse BeeKeep. Je testerais cette fonctionnalité à l'occasion. J'ai cependant trouvé une nouvelle facon de faire.

    Création d'un proxy et un système de notifications qui semble bien marcher pour le moment.

    Le principe est simple :
    - Chaque vue s'enregistre auprès du proxy en "preinitialize".
    - Des que la valeur change le proxy envoie une notification à tout les objets qui "observent".
    - Une fonction [HandleNotification("nomNotif")] dans les observeurs.

    bon courage à ceux qui pourront avoir ce souci.

    Zenklys

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/08/2007, 13h37
  2. event handler et accès anonyme
    Par @melie dans le forum SharePoint
    Réponses: 5
    Dernier message: 25/08/2007, 19h17
  3. Réponses: 1
    Dernier message: 15/08/2007, 15h45
  4. Birt Event Handler
    Par medbass dans le forum BIRT
    Réponses: 8
    Dernier message: 07/08/2006, 14h51
  5. Problème avec event handler
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/11/2005, 09h31

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