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 :

Problème de bindings de variable


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut Problème de bindings de variable
    Bonjour,

    Je suis actuellement confronté à un problème de binding au sein de mon application Flex. Je pense que ca vient d'un d'une mauvaise compréhension de ma part du système de binding de Flex.

    Voici en simplifiant au maximum comment est organisé mon code :

    J'ai une classe AS qui contient les données importantes de mon application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Bean {
        private var propA:int;
        private var propB:String;
     
        /* Getter et setter des proprietes A et B*/
     
    }
    Le fichier MXML principal de mon application contient une instance de mon bean et ce dernier est mis à jour depuis des fonctions javascript externe (le bean est correctement mis à jour) :

    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
    16
    17
     
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApplication()" layout="absolute">
     
    <mx:Script>
    	<![CDATA[
                  [Bindable] private var monBean:Bean;
     
                  private function initApplication():void {
                          monBean = new Bean();
                  }
     
                  /* Methodes de mise à jour du bean via addCallback */
                  /*      ...      */
     </mx:Script>
     
    <comp:MyPersoComp bean="{monBean}" width="100% height="100%"/>
    </mx:Application>
    Mon composant MXML principal contient un autre composant MXML qui a pour propriété la variable "bindé" monBean.
    Voici mon composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
    		<![CDATA[
    			[Bindable]
    			public var bean:Bean;
     
    		]]>
    	</mx:Script>
     
    <mx:Text text={bean.getPropB()}/>
    </mx:Canvas>
    Le problème auquel je suis confronté est lorsque monBean est mis à jour depuis mon composant MXML principal, ces changements ne sont pas automatiquement reportés au sein de mon composant "MyPersoComp ".

    Je pensais que le mot clé [Bindable] permettait justement de gérer automatiquement des events de mise à jour lors de l'update de la variable possédant ce mot clé ?

    Quelqu'un peut-il m'aider ?

  2. #2
    Membre Expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Par défaut
    Salut,

    euh si j'ai bien vu tu as 2 instances de ta classe Bean ... c'est donc normal que les propriétés modifiées de ton objet monBean ne soit pas répercuté sur ton objet bean.
    Enfin, j'ai peut être survolé trop rapidement ton soucis aussi ...

    NB: il y a un tuto sur le data binding : ICI

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 319
    Par défaut
    Tu remarqueras que tes propriétés elles ne sont pas [Bindable]

    je te laisse deviner quoi faire dans ce cas

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut
    Oulala, mais bien sur il faut que je rende bindable mes propriétés !!

    Merci beaucoup Kantizbak, je teste ça de suite.

    Jim merci pour le tuto. Je vais lire ça (ca va pas me faire de mal d'apprendre à coder en Flex un peu plus correctement)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Bindable]
    class Bean {
        private var propA:int;
        private var propB:String;
    
        /* Getter et setter des proprietes A et B*/
    
    }
    LE code en gras devrait suffire je pense

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Par défaut
    Merci

    Ca fonctionne

    J'ai remarqué un élément qui pourrait être utile pour d'autre personne. Mes setters et getters je les codait précédemment à la Java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private var propA:String;
     
    public function getPropA():String {
    return propA;
    }
    Et dans ce cas, le binding ne fonctionnait pas

    Mais en les codant de manière plus propre à la "AS3 way" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private var _propA:String;
     
    public function get  propA():String {
    return _propA;
    }
    Le binding marche

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Oui c'est ce qu'on appelle une propriété... J'espère qu'un jour Java proposera ce genre d'implémentation.

    Dernière précision, si seulement une partie des propriétés de la classe doivent être "bindées" tu peux ajouter l'option [Bindable] au niveau du set des propriétés concernée au lieu de rendre bindable la totalité de la classe.

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

Discussions similaires

  1. Shell et perl problème d'interpolation de variable.
    Par Whaouu dans le forum Langage
    Réponses: 7
    Dernier message: 26/10/2005, 17h39
  2. [FLASH 8] Probléme chargement .swf et variable
    Par segphault dans le forum Flash
    Réponses: 1
    Dernier message: 24/10/2005, 13h18
  3. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 01h55
  4. Réponses: 1
    Dernier message: 27/07/2005, 17h08
  5. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34

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