Aide - Recherche - Membres - Calendrier
Version complète : Liaison entre les composant du fichier mxml et ma classe
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
chychoun
Bonjour tout le monde

Voila j'ai un souci pour faire la liaison entre les boutons,
champtext etc... definie dans mon fichier mxml :

CODE
<mx:Application creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="603">
    <mx:Script><![CDATA[
    
    import Pixlp.Admin
    
    public function init():void {
        var myApp:Admin = new Admin()
    }
    
    ]]></mx:Script>
    <mx:ViewStack id="loginPage" width="768" height="585" borderStyle="none" horizontalCenter="0" verticalCenter="1">
        <mx:Canvas label="View 1" width="100%" height="100%">
            <mx:Form width="280" height="122" horizontalCenter="0" verticalCenter="0">
                <mx:FormItem label="Login">
                    <mx:TextInput id="_login"/>
                </mx:FormItem>
        ...


Et ma classe Admin.as :
CODE
    public class Admin {        
        
        public var _login:TextInput
        
        public function Admin() {
            this._login = new TextInput()
            this._login.text = "lionel"
        }
        ...


faut il utiliser la composition comme en flash icon_question.gif
j'avoue je ne sais pas trop

Merci d'avance

Tonic
Salut,

tu essaies d'avoir accès aux champs qui sont dans ton application dans ta classe Admin?

Si c'est le cas, tu fais fausse route.
Dans ta classe Admin, tu n'a rien qui fait référence à ton application, donc impossible d'avoir accès à des champs qui sont dans ton application.

Donc plusieurs choix :

1 ) tu passes une référence à de ton application à ta classe admnin.

2 ) tu crée une classe qui etend Application. Et dans ton mxml principale, tu n'utilises donc pas l'application de base : "<mx:Application" mais ta classe qui étend application : "<monmx:MonApplication creationComplete="init()" xmlns:monmx="mesClasses.*"
Et à ce moment là, tu auras accès à tes occurences directement dans ta classe.


chychoun
Re

Voila je lui passe ma et il me mets cette erreur je comprend pas pourquoi
voici le code :
CODE
<mx:Application creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%">
    <mx:Script><![CDATA[
    
    import Pixlp.Admin
    
    public function init():void {
        var myApp:Admin = new Admin(this._myAppli)
    }
    
    ]]></mx:Script>
    <mx:ViewStack id="_myAppli" width="700" height="500" borderStyle="none" horizontalCenter="0" verticalCenter="1">
        <mx:Canvas label="View 1" width="780" height="600" id="connexion">
            <mx:Form id="formConn" width="280" height="122" horizontalCenter="0" verticalCenter="0">
                <mx:FormItem label="Login">
                    <mx:TextInput id="_login"/>
                </mx:FormItem>
                <mx:FormItem label="Password">
                    <mx:TextInput id="_pwd" displayAsPassword="true"/>
                </mx:FormItem>


Mon appel dans la classe :
CODE
package Pixlp
{    
    import mx.controls.TextInput
    import mx.controls.Button
    import mx.containers.*
    import flash.events.MouseEvent
    import flash.display.Sprite;
    
    public class Admin {
        
        public var _myAppli:ViewStack
        //private var _btnLog:Button        
        private var _login:TextInput
        private var _pwd:TextInput
        
        public function Admin(aMyAppli:ViewStack) {
            
            
            this._myAppli = aMyAppli    
            
            this._myAppli.connexion.formConn._login.text = "test"


Merci d'avance
chychoun
Oups j'ai oublier l'erreur :
pour la ligne : this._myAppli.connexion.formConn._login.text = "test"

1119: Accès à la propriété connexion peut-être non définie, via la référence de type static mx.containers:ViewStack.
Tonic
Salut,

tu dois utiliser la méthode getChildByName(), voir rawChildren() pour faire référence à ton Canvas, et non utiliser directement son identifiant.
Fusion
CITATION(chychoun @ Jul 4 2007, 11:32 AM) *
Oups j'ai oublier l'erreur :
pour la ligne : this._myAppli.connexion.formConn._login.text = "test"

1119: Accès à la propriété connexion peut-être non définie, via la référence de type static mx.containers:ViewStack.



Très simple : essaie
CODE
this.connexion.formConn._login.text = "test"


L'objet n'est pas une propriété de la ViewStack, il est toujours dans l'application. J'ai testé smile.gif
chychoun
Non icon_sad.gif

fusion ca fonctionne pas

Tonic si je fais : var myCanvas:Canvas = this._myAppli.getChildByName("connexion")
il trouve tj une erreur
Fusion
Le getChildByName() ne marche pas pour les ViewStack. J'en ai chié à mes débuts en Flex pour cette raison icon_mrgreen.gif

Le coup de désigner une vue de la ViewStack par son id, je dirais que ça ne marche pas à tous les coups... mais ça fait deux fois que ça marche. Ca doit avoir un rapport avec le fait d'avoir défini sa vue dans la ViewStack ou en dehors...

Quant à une manière efficace d'obtenir n'importe quelle vue de la ViewStack... je suis preneur. J'utilise actuellement un tableau qui garde une référence vers chaque vue en parallèle.

Et pour finir, les tests que j'ai fait sur rawChildren() (que je pensais être le tableau contenant toutes les vues de la ViewStack) se sont révélés foireux. Peut-être que je m'y prends mal, mais je ne pense pas que ce soit le truc qu'il faut..
chychoun
Bon je pense avoir trouver une solution a mon probleme
je reviendrais pour donner plus d'info.

Juste une question je voulais me servir de la classe Delegate
mais je sais pas dans quel package elle se trouve et dans la
doc de flex pas trouvé non plus

Est ce qu'on peut l'utiliser dans AS3
Tonic
CITATION(Fusion @ Jul 4 2007, 10:08 AM) *
Le getChildByName() ne marche pas pour les ViewStack. J'en ai chié à mes débuts en Flex pour cette raison icon_mrgreen.gif


Heu non, ca tourne très bien icon_confused.gif

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    backgroundColor="#ffffff"
    layout="absolute"
    horizontalScrollPolicy="off"
    backgroundAlpha="0"
    creationComplete="init();"
>
    <mx:Script>
        <![CDATA[
            private function init():void
            {
                    var c : Canvas = v.getChildByName("c1") as Canvas;
                    trace(c.toString());
            }
        ]]>
    </mx:Script>
    <mx:ViewStack id="v" x="28" y="22" width="200" height="200">
        <mx:Canvas id="c1" label="View 1" width="100%" height="100%">
        </mx:Canvas>
        <mx:Canvas id="c2" label="View 1" width="100%" height="100%">
        </mx:Canvas>
    </mx:ViewStack>    
</mx:Application>
Fusion
CITATION(chychoun @ Jul 4 2007, 05:51 PM) *
Bon je pense avoir trouver une solution a mon probleme
je reviendrais pour donner plus d'info.

Juste une question je voulais me servir de la classe Delegate
mais je sais pas dans quel package elle se trouve et dans la
doc de flex pas trouvé non plus

Est ce qu'on peut l'utiliser dans AS3


D'après ce que j'ai compris, la classe Delegate a été rendue obsolète. Tu voulais t'en servir pour quoi?

CITATION(Tonic @ Jul 4 2007, 06:18 PM) *
Heu non, ca tourne très bien icon_confused.gif


Au temps pour moi alors icon_razz.gif Ca me simplifiera la vie .
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.