2012-12-04 41 views
0

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

回答

1

你不应该。一种观点永远不应该知道另一种观点的内容。你想要的是一个带有类似.loginStatus属性的模型,然后可以通过Login设置并通过设置来查看。您可以使用许多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

与属性Singleton类命名.loggedInStatus。你可以检查这个其他答案AS3 singleton implementations关于各种单例模式的讨论,以及为什么我使用我使用的单例模式。

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

+0

我很难在View实例中一直访问它。 非常感谢您,我将使用单例方法。 –

+0

不客气。让我们知道你是否有任何问题执行。快乐的编码 –

1

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

添加

public static var instance:Settings; 

来设置。 添加initializeEventListener设置,在函数内部设置实例:

instance=this; 

比你可以通过获取单身,喜欢随时随地访问设置页面:

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