【问题标题】:Access object inside View from another View?从另一个视图访问视图内的对象?
【发布时间】:2012-12-04 16:11:57
【问题描述】:

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

【问题讨论】:

    标签: actionscript-3 apache-flex flex4.5


    【解决方案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>
    

    登录.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 的属性的单例类。您可以查看其他答案 AS3 singleton implementations,以讨论各种单例模式以及我为什么使用我使用的模式。

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

    【讨论】:

    • 我很难在 View 实例中始终可以访问它。非常感谢,那我就用单例方法了。
    • 不客气。如果您有任何实施问题,请告诉我们。快乐编码
    【解决方案2】:

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

    添加

    public static var instance:Settings;
    

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

    instance=this;
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多