2011-03-19 2 views
0

Je me demande comment je passerais une valeur à « selectedChild » dans ViewStack:Le passage de paramètres entre les vues à ViewStack

Dans l'exemple ci-dessous, je suis en train de définir une propriété publique sous une forme appelée « registre » après avoir navigué là d'un autre formulaire appelé "login".

Le résultat je me semble être une erreur de compilation:

Error: Access of possibly undefined property pagename through a reference 
with static type mx.core:INavigatorContent. 
vsMain.selectedChild.pagename = "register page"; 

Toute idée de ce que la solution serait? Merci.

<mx:Panel x="0" y="0" width="285" height="221" 
    layout="absolute" title="ViewStack Basic "> 
    <mx:ViewStack x="0" y="0" id="vsMain" width="100%" height="100%"> 
      <mx:Canvas id="cnvLogin" label="Login" width="100%" height="100%"> 
      <mx:Script> 
      public function myClick():void { 
       vsMain.selectedChild=cnvRegister; 
       vsMain.selectedChild.pagename = "register page"; 
      } 
      </mx:Script> 

     <mx:Label x="10" y="10" text="Login Page" fontWeight="bold"/> 
     <mx:Label x="10" y="36" text="Username:"/> 
     <mx:TextInput x="85" y="34" id="txtLoginUser"/> 
     <mx:Label x="10" y="62" text="Password:"/> 
     <mx:TextInput x="85" y="60" id="txtLoginPass"/> 
     <mx:Button x="10" y="100" label="Login" id="butLogin"/> 
     <mx:LinkButton x="126" y="100" label="Need to Register?" enabled="true" 
      click="myClick()"/> 
     </mx:Canvas> 
     <mx:Canvas id="cnvRegister" label="Register" width="100%" height="100%"> 
      <mx:Script> 
     [Bindable] 
      public var pagename:String; 

      </mx:Script> 
     <mx:Label x="10" y="10" text="{name}" fontWeight="bold"/> 
     <mx:Label x="10" y="36" text="uname"/> 
     <mx:TextInput x="107" y="34" id="txtRegUser" width="138"/> 
     <mx:Label x="10" y="62" text="Password:"/> 
     <mx:TextInput x="107" y="60" id="txtRegPass" width="138"/> 
     <mx:Label x="10" y="90" text="Password Again:"/> 
     <mx:TextInput x="107" y="88" id="txtRegPassAgain" width="138"/> 
     <mx:Button x="10" y="141" label="Register" id="butRegister"/> 
     <mx:LinkButton x="107" y="141" label="Already Registered?" enabled="true" 
      click="{vsMain.selectedChild=cnvLogin}"/> 

     </mx:Canvas> 
    </mx:ViewStack> 
    </mx:Panel> 
</mx:Application> 

Répondre

0

Si je lis correctement, ce que vous essayez de faire est juste transmettre des données d'une vue de la vue vers une autre vue? Ce que vous devez faire est d'avoir un modèle de données pouvant être lié à au même niveau que le ViewStack:

<fx:Script> 
    <![CDATA[ 
     // Just a class with public variables where you save/bind data 
     [Bindable] private var _model:SomeModel; 
    ]]> 
</fx:Script> 

<mx:ViewStack> 
    <!-- You need to create a public variables 'dataProvider' in both there views --> 
    <View1 dataProvider="{this._model}" /> 
    <View2 dataProvider="{this._model}" /> 
</mx:ViewStack> 

Si vous modifiez les données dans la première vue, la deuxième vue sera capable de le voir quand il est instancié.

+0

J'ai une erreur, en essayant de créer dataProvider pour les objets Canvas: Erreur: Impossible de résoudre l'attribut 'dataProvider' pour le type de composant mx.containers.Canvas. Je le fais mal? – user270398

+0

Oui. Canvas n'a pas de propriété dataProvider, vous devez le créer en créant un composant personnalisé (créer un nouveau fichier mxml) qui étend Canvas (ou tout autre composant UIComponent souhaité), dans lequel vous ajoutez le getter/setter dataProvider. Vous devriez lire sur la façon de créer des composants étendus. –

1

Vous devez déplacer la déclaration à l'élément supérieur pour rendre le public variable pour les composants ViewStack:

<mx:Script> 
    [Bindable] 
    public var pagename:String; 
</mx:Script> 

<mx:Panel x="0" y="0" width="285" height="221" 
    layout="absolute" title="ViewStack Basic "> 
    <mx:ViewStack x="0" y="0" id="vsMain" width="100%" height="100%"> 
    ... 
Questions connexes