Flex / Actionscript:将数据从自定义类传递到主应用程序?

时间:2011-08-04 19:38:53

标签: flex actionscript scope

好吧这可能听起来很愚蠢,但我是Flex编程的初学者。

我有一个带有.mxml主文件的应用程序,以及我从.mxml调用的某个类Foo

在Foo中,我创建了一个URLRequest并监听Complete事件。然后我发现自己在Foo函数中返回了数据,但我不知道如何将它传递给应用程序的.mxml部分!我查看了ArrayCollections,但我似乎无法理解它们是如何工作的以及它是否有用。难道没有办法从类内部修改具有全局范围的变量吗?

5 个答案:

答案 0 :(得分:2)

这听起来像一个小应用程序,但如果它是一个大型应用程序,您可能想要查看像RobotLegs

这样的微框架

如果您的Foo类扩展了EventDispatcher,那么它将能够发送事件并让主MXML应用程序监听所述事件。

package com.example
{
    import flash.events.EventDispatcher;
    import com.example.events.MyEvent;

    public class Foo extends EventDispatcher 
    {
        public function doAction():void 
        {
            var someData:String = "blah";
            dispatchEvent(new MyEvent(MyEvent.SOMETHING_HAPPENED, someData));
        }
    }
}

带有效负载的自定义事件(在本例中为字符串)

package com.example.events 
{
    import flash.events.Event;

    public class MyEvent extends Event 
    {
        static public const SOMETHING_HAPPENED:String = "somethingHappened";

        private var _myData:String;

        public function get myData():String 
        {
            return _myData;
        }

        public function MyEvent(type:String, myData:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        {
            _myData = myData;
            super(type, bubbles, cancelable);
        }

        override public function clone():Event 
        {
            return new MyEvent(type, myData, bubbles, cancelable);
        }
    }
}

使用主文件中的Foo类:

public function EventDispatcherExample() {
    var foo:Foo = new Foo();
    foo.addEventListener(MyEvent.SOMETHING_HAPPENED, actionHandler);
    foo.doAction();
}

private function actionHandler(e:MyEvent):void {
    trace("my data is: " + e.myData);
}

答案 1 :(得分:1)

import mx.core.FlexGlobals;
FlexGlobals.toplevelApplication.varName;

答案 2 :(得分:1)

您的Foo类可以调度一个事件,并在您的main.mxml中监听该事件。我相信我可以创造一个例子。我认为它是在Flex文档中的客户事件中。这是假设我理解这个问题。

答案 3 :(得分:1)

正如约翰所说,一个事件是你最好的选择。

如果你想要一些示例代码,我在这里提供了一些类似的问题:Data from Popup to Main Application?

答案 4 :(得分:0)

事件可能是最好的方式,因为它已被陈述。 另一种方法是发送像这样的事件

dispatchEvent(new Event('somethingHappened'));

并在您的课程中为您需要的数据创建一个get方法。

然后你在主应用程序中所要做的就是这个

var foo:Foo = new Foo();
foo.addEventListener('somethingHappened', actionHandler);

private function actionHandler(e:Event):void 
{
    trace(foo.memberData);
}

如果数据应该是一个类成员,并且你想避免创建一个新的事件类,这种方式可能更合适。