2011-03-19 32 views
0
傳遞視圖之間的參數

我不知道我怎麼會值傳遞給在ViewStack「SelectedChild」:在ViewStack

在下面的例子中,我試圖在一個叫「註冊」的形式設置一個公共屬性在我從另一個稱爲「登錄」的表單導航之後。

結果我得到的似乎是一個編譯錯誤:

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

任何想法的解決辦法是什麼呢? 謝謝。

<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> 

回答

0

,你正在做的是隻將數據從視圖中的一個視圖傳遞到另一個視圖?你應該做的是在同一水平則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> 

如果更改在第一個視圖中的數據,第二個觀點會能夠在實例化時看到它。

+0

我有一個錯誤,試圖爲Canvas對象創建dataProvider: 錯誤:無法解析組件類型爲mx.containers.Canvas的屬性'dataProvider'。 我做得不對? – user270398 2011-03-19 21:39:12

+0

是的。 Canvas沒有dataProvider屬性,您需要通過創建一個自定義組件(創建一個新的mxml文件)來創建它,該組件可以擴展Canvas(或任何您想要的UIComponent),並在其中添加dataProvider getter/setter。您應該閱讀如何創建擴展組件。 – 2011-03-21 20:17:43

1

你應該聲明移到頂部元素,使檢測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%"> 
    ...