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 :

Binding fonctionne en MXML mais pas en AS3


Sujet :

Flex

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut Binding fonctionne en MXML mais pas en AS3
    Bonjour,

    je viens vers vous pour un soucis plutôt bizarre.

    j'ai fait un tout petit projet en mxml, avec un label qui affiche une phrase dans laquelle un Number est bindé et incrémenter lors du click sur un bouton . Ici no souci tout fonctionne bien, voici le code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    	layout="absolute"
    	creationComplete="{compteur = 0}">
     
    	<mx:Panel x="87" 
    		y="60" 
    		width="429" 
    		height="200" 
    		layout="absolute"
    		title="Hello Aubay">
     
    		<mx:Label x="7" 
    			y="48" 
    			text="L'équipe compte {compteur.toString()} collaborateurs !!!!"
    			fontSize="12"/>
     
    		<mx:Button x="118" 
    			y="108" 
    			label="Ajouter un collaborateur"
    			click="{compteur++}"/>
     
    	</mx:Panel>
     
    	<mx:Number id="compteur"/>
     
    </mx:Application>

    Maintenant je veux faire la même chose en tout ActionScript, et la sa pose problème. Je n'arrive pas faire du Bindable dans le label.text. On est obligé de passer par une fonction updateLabel, ou y a t il un autre moyen ??????

    voici mon code :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    	layout="absolute"
    	creationComplete="Init()">
     
    	<mx:Script >
    		<![CDATA[
    			import mx.utils.StringUtil;
    			import mx.binding.utils.BindingUtils;
    			import mx.controls.Alert;
    			import mx.controls.Button;
    			import mx.controls.Label;
    			import mx.containers.Panel;
     
    			[Bindable]
    			public var compteur:Number;
     
     
    			public var sentence:Label;
     
    			/* public function get compteur():Number { return _compteur;}
    			public function set compteur(value:Number):void { _compteur=value;}
    		 */	
     
    			private function Init():void
    			{
    				compteur = new Number(10);
     
    				var content:Panel = new Panel();
    					content.x = 87;
    					content.y = 60;
    					content.width = 429;
    					content.height = 200;
    					content.layout = 'absolute';
    					content.title = 'Hello Aubay'; 
     
    				this.addChild(content);
     
     
    				    sentence = new Label();
    					sentence.x =  7;
    					sentence.y = 48;
    					sentence.setStyle('fontSize','12');
    					sentence.executeBindings(true);
    					sentence.text = "L'equipe compte" + compteur.toString() + " collaborateurs !!" ;
    					content.addChild(sentence);	
     
     
    				var btAdd:Button = new Button();
    					btAdd.x = 118;
    					btAdd.y = 108;
    					btAdd.label = 'Ajouter un collaborateur';
    					btAdd.addEventListener(MouseEvent.CLICK,addEmployee);
     
    				content.addChild(btAdd);
    			}
     
     
     
    			private function addEmployee(event:MouseEvent):void
    			{						
    				compteur++;
     
    			}
     
     
    		]]>
    	</mx:Script>
     
    </mx:Application>
    j'ai déjà essayé beaucoup de synthaxe (avec les {}, met il les prend comme des string), et la j'arrive au bout de mes ressources et j'aimerais comprendre.

    merci d'avance pour vos explications

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Bonjour,

    As tu regardé la doc officielle ? Tout y est indiqué :
    Defining data bindings in ActionScript

    Il faut en fait utiliser BindingUtils.

    Essaies de l'utiliser et fais nous un retour

    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    MErci ellene, j'ai déjà regardé la doc, mais je continu de chercher.

    Par contre pourquoi ca ne fonctionne pas le Binding, dans le label.text en action script c'est ca que j'aimerai savoir ???

    merci d'avance

    et la solution c'est de créer un méthode d'update après l'incrémentation du compteur, mais j'aurais aimé éviter ca

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Lorsqu'on code en ActionScript on perd toute la magie du MXML ! Après tout ce sont deux langages différents.
    La seule solution pour retrouver le principe des accolades en ActionScript c'est le BindingUtils. Tu dois lier ta chaîne de caratère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var chaine:String = "L'équipe compte " + compteur.toString() +" collaborateurs !!!!"
    à ton label.text et dans addEmployee tu modifies chaine.

    Je ne vois que ça en fait.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 16
    Par défaut
    Bonjour,


    Comme l'a dit Ellene, le MXML et l'AS fonctionne différemment, en particulier le MXML qui doit cacher un maximum de listener pour fonctionner correctement (et aussi facilement).

    Faute de temps, je n'ai pas pu tester la solution que je vais te proposer, mais tu peux tenter de forcer le databinding (outre que d'utiliser BindingUtils).

    Pour cela, utilise un get/set comme suit :

    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
     
     
          private _compteur : Number = 0;
     
          [Bindable(Event="compteurChangeEvent")]
          public function get compteur() : Number
          {
             return _compteur;
          }
     
          public function set compteur( compteur__: Number ) : void
          {
             _compteur= compteur__;
     
             dispatchEvent( new Event( "compteurChangeEvent" ) );
          }
    et tu utilises TOUJOURS le setter pour mettre à jour ta valeur et le getter pour obtenir la valeur.

    Je croise les doigts pour toi, et n'hésites pas à donner des nouvelles

    Bonne soirée,
    Nicolas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    Salut Nicskull,

    je te remercie pour ton conseil, je ne connaissait pas le Binding avec les Events c'est assez puissant. J'ai trouvé un petit exemple sur le net, je met le lien pour ceux qui veulent avoir plus de détails:
    http://studio.jacksay.com/adobe-flex...u-data-binding

    Par contre, je reviens toujours sur le même problème.

    Il paraît impossible de faire du DataBinding et AS3, sur une variable.

    Par exemple un monLabel.text = {variable}, n'est pas permis.

    Donc les solutions sont :

    passer par du MXML pour les élèments graphiques ce qui permettra de réaliser du DataBinding facilement, ou alors comme le disait ellene, si il s'agit de faire du Binding entre deux élèments, le BindingUtils, rempli bien cette fonction.

    voila j'ai eu mes réponses,

    je remercie ellene et Nicskull, pour leur aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/10/2009, 09h54
  2. Réponses: 4
    Dernier message: 14/03/2006, 10h04
  3. Réponses: 2
    Dernier message: 23/11/2005, 17h10
  4. Fonction JS qui fonctionne avec Mozilla mais pas avec IE.
    Par etiennegaloup dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2005, 13h58
  5. Programme fonctionnant sur Eclipse mais pas avec le jar?
    Par kirik dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/02/2004, 13h43

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