我想知道如何在ViewStack中将值传递给“SelectedChild”:
在下面的示例中,我尝试在另一个名为“login”的表单中导航后,以名为“register”的形式设置公共属性。
我得到的结果似乎是编译错误:
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 :(得分:1)
您应该将声明移到top元素,以使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%">
...
答案 1 :(得分: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>
如果更改第一个视图中的数据,第二个视图将在实例化时看到它。