0

应用程序X.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 ?
4

2 回答 2

1

你不应该。一个视图永远不应该知道另一个视图里面是什么。您想要的是一个具有类似 .loginStatus 属性的模型,然后可以通过 Login 设置并由 Settings 看到。您可以使用多种 MVC 样式中的一种来完成此操作。对 MVC 模式和 Flex 进行一些谷歌搜索,看看这是完成的不同方式。同时,这里有一个快速的例子:

设置.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>

登录.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>

我的模型.as

具有名为 .loggedInStatus 的属性的单例类。您可以查看这个其他答案AS3 singleton implementations,以讨论各种单例模式以及我为什么使用我使用的模式。

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

于 2012-12-05T04:59:04.287 回答
1

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

添加

public static var instance:Settings;

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

instance=this;

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

Settings.instance.myLabel.text="success";
于 2012-12-04T22:58:46.523 回答