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 :

Comprendre le dataBinding


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Par défaut Comprendre le dataBinding
    Bonjour à tous,

    Par curiosité, je voudrais comprendre

    Quelque chose m'échappe dans le mécanisme de binding de l'exemple suivant. Je ne comprend pas pourquoi le label du premier bouton ne fonctionne pas alors que le deuxième si :s

    L'application : deux boutons qui ajoute 'y' au nom du chien
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			   xmlns:s="library://ns.adobe.com/flex/spark" 
    			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
    	<fx:Script>
    		<![CDATA[
    			[Bindable]
    			private var _pm:PM;
     
    			[Bindable]
    			private function get dog():Dog{
    				return _pm.animal as Dog;
    			}
    			private function set dog(value:Dog):void{
    				_pm.animal = value;
    			}
     
    			protected function nicknameButton_clickHandler(event:MouseEvent):void
    			{
    				if(_pm==null){
    					_pm = new PM();
    				}else{
    					dog.nickName = dog.nickName +'y';
    				}
    			}
     
    		]]>
    	</fx:Script>
    	<s:layout>
    		<s:HorizontalLayout />
    	</s:layout>
    	<s:Button id="notWorkingButton"
    			  label="{dog.nickName}"
    			  click="nicknameButton_clickHandler(event)"/>
    	<s:Button id="workingButton"
    			  label="{(_pm.animal as Dog).nickName}"
    			  click="nicknameButton_clickHandler(event)"/>
    </s:Application>
    et le "modèle"

    PM.as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	[Bindable]
    	public class PM
    	{
    		public var animal:Animal;
     
    		public function PM()
    		{
    			this.animal = new Dog();
    		}
    	}
    Animal.as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	[Bindable]
    	public class Animal
    	{
    		public function Animal()
    		{
    		}
    	}
    Dog.as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	[Bindable]
    	public class Dog extends Animal
    	{
    		public var nickName:String = "Jack";
    		public function Dog()
    		{
    			super();
    		}
    	}
    Merci d'avance pour vos explications.

  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,

    Je vais tenter d'être compréhensible

    Alors ton premier bouton reste désespérément vide car tu bindes un getter et non directement une variable.

    Grosso merdo, ton getter il ne leve jamais l'event de changement car il ne sait pas comment se comporte ce qu'il renvoi, il ne sait donc pas qd envoyer l'event. Il te faut le faire toi même.

    Cette modif sur ton Application.mxml résoud le problème:
    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
     
    [Bindable(event="propertyChange")]
    private function get dog():Dog{
    	return _pm.animal as Dog;
    }
     
    private function set dog(value:Dog):void{
    	_pm.animal = value;
    }
     
    protected function nicknameButton_clickHandler(event:MouseEvent):void
    {
    	if(_pm==null){
    		_pm = new PM();
    	}else{
    		dog.nickName = dog.nickName +'y';
    	}
    		this.dispatchEvent(new Event("propertyChange"));
    }
    En espérant que cela t'aide.

    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

Discussions similaires

  1. comprendre les termes du databinding en silverlight
    Par Issam dans le forum Silverlight
    Réponses: 3
    Dernier message: 22/09/2010, 10h04
  2. Comprendre le databinding avancé
    Par chrisdot dans le forum Silverlight
    Réponses: 8
    Dernier message: 17/05/2010, 14h43
  3. [VB.NET][DataBinding] Rafraichissement DataGrid lié à un obj
    Par speedy1496 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/10/2004, 10h15
  4. [C#] Problème de DataBinding
    Par bilb0t dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/10/2004, 11h38
  5. [Procédure][java] A n'y rien comprendre
    Par Stessy dans le forum SQL
    Réponses: 2
    Dernier message: 18/03/2004, 15h05

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