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 :

Code behind depuis une instance en AS3


Sujet :

Flex

  1. #1
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut Code behind depuis une instance en AS3
    Bonjour,

    Je cherche a créer des Panels ou autre TitleWindow a la volée, cela ne pose pas de probleme, dans une fonction AS3 je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public function onNewWindow():void
    {
      var oPanel:Panel = new Panel;
      mx.managers.PopUpManager.addPopUp(oPanel, this, false);	
    }
    Maintenant, je veut faire pareil avec un custom component, qui utilise le code behind.



    fichier MenuTest.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
     
    <comp:MenuTestClass
    		xmlns:comp="components.*"
    	 	xmlns:mx="http://www.adobe.com/2006/mxml" 
    		>
     
    		<mx:Canvas>
    			<mx:Button label="Sauvegarder" id="btnSave" />
    		</mx:Canvas>
     
    </comp:MenuTestClass>

    Fichier MenuTestClass.as

    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
     
    package components
    {  
        import mx.controls.*;
        import mx.containers.*;
        import mx.events.FlexEvent;
     
    	public class MenuTestClass extends TitleWindow
    	{
    		public var btnSave:Button;
     
    		public function MenuTestClass() {
     
    			btnSave.addEventListener("click", onSave);
     
    			this.title = "Settings";
    			this.alpha = 0.98;
    			this.percentHeight  = 100;
    			this.percentWidth = 100;
    			this.x = 320;
    			this.y = 90;
     
     
    		}
     
    		private function onSave():void {
    			Alert.show("onSave");
                            // etc
    		}
     
    	}
     
     
    }

    Voici le probleme : Apparemment, le code behind est effectif uniquement si le composant est instanciée en mxml

    Application principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
      <MenuTest>
           ....
      <MenuTest/>
    ...

    Ceci ne m'intéresse pas, car comme dit le composant est crée a la volé, en reprenant le premier exemple, mais avec utilisation du custom component.


    en utilisant le nom de la class AS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function onNewWindow():void
    {
      var oTest:MenuTestClass = new MenuTestClass ;
      mx.managers.PopUpManager.addPopUp(oTest, this, false);	
    }
    Résultat :
    TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
    at components::MenuTestClass()[...\src\components\MenuTestClass.as:13]
    Ce qui veut dire que le btnSave n'est pas instancié, mais juste définit, le code behind n'est plus effectif et la fenetre n'est pas affiché, car on ne passe pas par le code mxml. Cela marche si j'instancie btnSave = new Button et que je l'ajoute avec un this.addChild(btnSave). Comme pour creer un compsant uniquement en AS (le mxml est donc ignoré)

    Quand je commente la ligne 13 (btnSave.addEventListener("click", onSave); ) la titleWindow s'affiche sans composants a l'intérieur.
    ____________________________________________________________

    En utilisant le nom du fichier mxml, comme on le ferai dans une instanciation en mxml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function onNewWindow():void
    {
      var oTest:MenuTest = new MenuTest ;
      mx.managers.PopUpManager.addPopUp(oTest, this, false);	
    }
    Quand je commente la ligne 13 (btnSave.addEventListener("click", onSave); ) la titleWindow s'affiche avec les composants, mais bien sur la fonction onSave ne peut etre appelle.

    Alors, le code behind n'est pas supporté depuis l'action script ? d'ailleurs dans le tuto d'adobe http://www.adobe.com/devnet/flex/qui...g_code_behind/ le composant est bien instancié en mxml

    Dernière remarque, le code behind fonctionne uniquement pour l'instance (this) du composant, ainsi un this.title = "Quarante deux "; changera bien le titre, mais les membres ne sont pas bindé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="utf-8"?>
    <custom:ApplicationClass 
        xmlns:custom="components.*"
     
        viewSourceURL="src/CodeBehind/index.html"
        width="400" height="310"
    >
        <custom:PaddedPanel title="Code Behind">
     
            <custom:AddressForm id="addressForm"/>
        </custom:PaddedPanel>
    </custom:ApplicationClass>
    all your base are belong to us.

  2. #2
    Membre éclairé
    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
    Points : 894
    Points
    894
    Par défaut
    Ma réponse sera incomplète car je n'ai jamais utilisé le "code behind" (que je découvre...) mais en ce qui concerne l'ajout du listener à btnSave je peux dire qu'il ne doit pas être fait dans le constructeur car les composants enfants ne sont pas encore instanciés.
    Il faut le faire dans l'événement creationComplete. cf. http://www.adobe.com/devnet/flex/qui...g_code_behind/
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 78
    Points : 94
    Points
    94
    Par défaut
    Je ne connaissais pas non plus mais j'aime beaucoup cette implémentation évite le mélange des genres.
    Merci pour l'info.

  4. #4
    Membre actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 263
    Points
    263
    Par défaut
    Ok, je vais deplacer cette partie dans le creation complete...

    Pour résumer mon probleme, par rapport a l'exemple d'adobe, il faudrai faire la meme chose mais en remplacent le code mxml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <custom:ApplicationClass 
        xmlns:custom="components.*"
     
        viewSourceURL="src/CodeBehind/index.html"
        width="400" height="310"
    >
        <custom:PaddedPanel title="Code Behind">
     
            <custom:AddressForm id="addressForm"/>
        </custom:PaddedPanel>
    </custom:ApplicationClass>
    Par de l'actionscript...



    [/CODE]
    all your base are belong to us.

Discussions similaires

  1. [Débutant] Appeler une fonction C# code Behind depuis le aspx en Javacript
    Par SultanGeek dans le forum ASP.NET
    Réponses: 8
    Dernier message: 26/06/2015, 15h40
  2. Réponses: 2
    Dernier message: 20/05/2008, 17h24
  3. Appeler du code behind depuis un événement javascript :
    Par FredChautems dans le forum ASP.NET
    Réponses: 8
    Dernier message: 24/03/2008, 13h36
  4. Appeler du code behind depuis un événement javascript :
    Par FredChautems dans le forum Framework .NET
    Réponses: 0
    Dernier message: 20/03/2008, 12h59
  5. Réponses: 2
    Dernier message: 22/08/2006, 11h28

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