2012-12-04 61 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";