Actionscript 3 从另一个视图访问对象内部视图?
applicationX.mxml:Actionscript 3 从另一个视图访问对象内部视图?,actionscript-3,apache-flex,flex4.5,Actionscript 3,Apache Flex,Flex4.5,applicationX.mxml: <?xml version="1.0" encoding="utf-8"?> <s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160" >
<?xml version="1.0" encoding="utf-8"?>
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160" >
<s:ViewNavigator label="Login" width="100%" height="100%" firstView="views.LoginView" />
<s:ViewNavigator label="Settings" width="100%" height="100%" firstView="views.SettingsView" />
</s:TabbedViewNavigatorApplication>
Settings.mxm(设置视图):
- 如何从登录视图访问myLabel
instance=this;
通过获取单例,您可以随时访问设置页面,如:
Settings.instance.myLabel.text="success";
你不应该。一个视图永远不应该知道另一个视图中的内容。您需要的是一个具有类似.loginStatus属性的模型,该属性可以通过登录进行设置,并通过设置查看。您可以使用多种MVC样式中的一种来实现这一点。在谷歌上搜索一下MVC模式和Flex,看看它们的不同实现方式。同时,这里有一个简单的例子: Settings.mxml:
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<fx:Script>
<![CDATA[
private var model:MyModel = MyModel.getInstance();
]]>
</fx:Script>
<s:Label id="myLabel" text="{model.loggedInStatus}" />
</View>
Login.mxml:
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<fx:Script>
<![CDATA[
private var model:MyModel = MyModel.getInstance();
private function loginSucceded():void{
model.loggedInStatus="Logged In";
}
]]>
</fx:Script>
</View>
MyModel.as
具有名为.loggedInStatus的属性的Singleton类。您可以查看另一个答案,了解关于各种单例模式的讨论,以及我为什么使用我使用的单例模式
这是一个非常简单的例子。您不希望使用人类可读的字符串loggedInStatus来确定状态或任何东西。但这是一个模型如何工作以及视图如何根据模型状态显示适当内容的示例。我认为它在视图实例中始终是可访问的。非常感谢,到时候我将使用单例方法。不客气。如果您在实施过程中遇到任何问题,请告知我们。快乐编码
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<fx:Script>
<![CDATA[
private var model:MyModel = MyModel.getInstance();
]]>
</fx:Script>
<s:Label id="myLabel" text="{model.loggedInStatus}" />
</View>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" >
<fx:Script>
<![CDATA[
private var model:MyModel = MyModel.getInstance();
private function loginSucceded():void{
model.loggedInStatus="Logged In";
}
]]>
</fx:Script>
</View>