2011-04-11 50 views
0

我有一個mxml類,我放置一個列表和幾個按鈕。FLEX:如何從AS3外部類文件引用MXML類?

我想兩件事情:

  • 從一類是外部文件訪問列表。
  • 要添加我的as3類作爲孩子(視覺元素),因爲我需要獲得「舞臺」(全局屬性)。

我不想通過<![CDATA[]]>將太多的代碼嵌入到mxml中。

因此,例如MXML的

<?xml version="1.0" encoding="utf-8"?> 
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="800" minHeight="600" width="800" visible="true"> 
     <fx:Style source="Main.css"/> 
     <fx:Declarations> 
      <!-- Place non-visual elements (e.g., services, value objects) here --> 
     </fx:Declarations> 
     <fx:Script> 
      <![CDATA[ 
       private var menuController:CMenuController= new CMenuController(); 
      ]]> 
     </fx:Script>  
     <s:List x="598.35" y="100.55" width="178" height="324" id="ListBox"> 
      <s:layout> 
       <s:VerticalLayout/> 
      </s:layout> 
     </s:List> 
</s:Application> 

因此,我想從訪問列表框 CMenuController,因爲我是在CDATA打字。此外,我需要能夠在CMenuController中添加Sprite和Shapes槽addChild()方法。

回答

0

您必須先將Sprites和Shapes添加到UIComponent,然後將其添加到Flex代碼中。

要訪問來自外部as3類的Flex代碼,請在as3類中提供參考。像這樣:

menuController.listReference = LISTID;

0

我不認爲你會從應用程序邏輯中分離視覺元素的概念。你試圖完成的事情被認爲是非常糟糕的形式,因爲它使意大利麪代碼。

你應該做的是通過創建一個ArrayCollection任何你想在列表中顯示(這可能是MenuController的一個屬性)來使用數據驅動的方法。然後添加一個自定義項目渲染器來執行您需要的任何操作。像這樣的:

<s:List dataProvider="{menuController.yourListData}" itemRenderer="YourCustomItemRenderer" /> 

在項目渲染器,您可以顯示要取決於yourListData數據什麼的。我建議您閱讀how item renderer works以及嘗試查找數據驅動的Flex應用程序的示例。