从另一个View中查看View里面的对象?

时间:2012-12-04 16:11:58

标签: actionscript-3 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" >

    <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(设置视图):

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" >

    <s:Label id="myLabel" />
</View>
  • 如何从登录视图访问 myLabel

2 个答案:

答案 0 :(得分:1)

设置设置singleton。这意味着,您定义一个指向项本身的静态变量(它只需要一个Settings.mxml实例)

添加

public static var instance:Settings;

设置。 将initializeEventListener添加到设置中,并在函数内设置实例:

instance=this;

您可以通过获取单身人士随时访问“设置”页面,例如:

Settings.instance.myLabel.text="success";

答案 1 :(得分:1)

你不应该。一个视图永远不应该知道另一个视图中的内容。你想要的是一个带有.loginStatus属性的模型,然后可以通过Login设置并通过Settings查看。您可以使用许多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类。你可以查看这个其他答案AS3 singleton implementations,讨论各种单例模式以及为什么我使用我使用的模式。

这是一个非常简单的例子。您不希望使用人类可读的字符串loggedInStatus来确定状态或任何内容。但这是一个示例,说明模型如何工作以及视图如何根据模型的状态显示正确的事物。