Domanda

Non ho completamente capito come componenti personalizzati funzionano ...

Supponiamo che io ho la mia domanda Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx"
       xmlns:local="*">
    <fx:Script>
        <![CDATA[
            private var privateStr:String = "Stringa Private";
            public  var publicStr:String = "Stringa Public";
        ]]>
    </fx:Script>
    <local:AddUser height="100" width="500"/>   
    <s:Label id="lblText" x="120" y="120" width="418" height="115" text="!!!"/>                                    
</s:WindowedApplication>

E l'AddUser.mxml componente

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="initialize_component()">  
    <fx:Script>
        <![CDATA[                                               
            public var btnName:String = "Login";
        private function initialize_component():void
        {
             login.label = btnName;              
            }
            private function doLogin():void
            {
             //some stuff here
            }

        ]]>
    </fx:Script>
    <s:TextInput id="txtuser" x="96" y="36"/>
    <s:TextInput id="txtpass" x="96" y="66"/>
    <s:Button id="login" x="96" y="96" width="128" click="doLogin()" />
</mx:VBox>

Vorrei che sul pulsante (login) clicca ho la publicStr / privateStr che sono in main.mxml ... Mi appare tutto sbagliato? Come posso utilizzare più componenti come se fossero tutti parte della stessa applicazione e utilizzare le stesse variabili / metodi?

È stato utile?

Soluzione

Sembra che stai avendo problemi con l'idea di incapsulamento. componenti bambino non dovrebbe sapere sui componenti principali, e Vista componenti non devono fare il lavoro vero e proprio, unico lavoro richiesta dai componenti del controller. Nei progetti molto semplici, il componente di livello superiore può contenere la logica di controllo, ma molte persone preferiscono tenerlo separato anche in piccoli progetti. Come fare questo è oltre la portata di questa risposta.

Quindi, come dovrebbe il genitore e il bambino comunicare correttamente? componenti secondari dovrebbero esporre le proprietà che il genitore (o di un quadro, se ti senti pronto per l'uso di un quadro di iniezione di dipendenza) possibile popolare con solo i dati componenti bambino ha bisogno.

componenti figlio richiesta di lavoro dal controller generando eventi.

Quindi, doLogin () sarebbe Containe qualcosa come

dispatchEvent(new Event('doLogin'));

e il componente principale sarebbe essere in ascolto per questo evento. Nel suo gestore, si dovrebbe effettuare l'accesso. Più che probabile, il tuo login sarebbe asincrona, quindi avrai bisogno di un altro gestore per ascoltare i dati di login di tornare. Quando i dati di login torna, sarà quindi impostare le proprietà sul login Visualizza sulla base del ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top