FLEX:如何从AS3外部类文件引用MXML类?

时间:2011-04-11 18:14:08

标签: flex actionscript-3 list flexbuilder

我有一个mxml类,我在其中放置一个列表和几个按钮。

我想要两件事:

  • 从作为外部文件的类访问列表。
  • 将我的as3类添加为子(可视元素),因为我需要获取“stage”(全局属性)。

我不想通过<![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>

因此,当我输入 CDATA 时,我想从 CMenuController 访问 ListBox 。此外,我需要能够在 CMenuController 中通过 addChild()方法添加Sprite和Shapes。

2 个答案:

答案 0 :(得分:0)

您必须先将Sprite和Shapes添加到UIComponent,然后将其添加到Flex代码中。

要从外部as3类访问Flex代码,请在as3类中引用。像这样:

menuController.listReference = LISTID;

答案 1 :(得分:0)

我认为你没有将视觉元素与应用程序逻辑分离的概念。你想要完成的东西被认为是非常糟糕的形式,因为它使意大利面条代码。

你应该做的是使用数据驱动的方法,创建一个ArrayCollection你希望在List中显示的内容(可能是MenuController的属性)。然后添加自定义项呈示器以执行您需要的任何操作。有点像这样:

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

在项目渲染器中,您可以根据yourListData的数据显示您想要的任何内容。我建议你阅读how item renderer works,并尝试查找数据驱动的Flex应用程序的示例。