繁体   English   中英

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

[英]Flex/Actionscript : passing data from custom class to main application?

好的,这听起来有些愚蠢,但我是Flex编程的完整入门者。

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

在Foo中,我创建一个URLRequest并侦听Complete事件。 然后,我在Foo函数中发现了返回的数据,但是我不知道如何将其传递给applicaton的.mxml部分! 我研究了ArrayCollections,但似乎无法理解它们如何工作以及是否有帮助。 没有办法从类内部修改具有全局作用域的变量吗?

这听起来像是一个小型应用程序,但是如果它是大型应用程序,则可能需要查看像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);
}
import mx.core.FlexGlobals;
FlexGlobals.toplevelApplication.varName;

您的Foo类可以调度事件,并且在您的main.mxml中包含一些内容以侦听该事件。 我确信我可以创建一个例子。 我认为这是在Flex文档中的客户事件下。 假设我理解这个问题。

正如约翰所说,活动是您的最佳选择。

如果您想要一些示例代码,我在这里提供了一个类似的问题: 从弹出窗口到主应用程序的数据?

如前所述,事件可能是最好的方法。 另一种方法是调度这样的事件

dispatchEvent(new Event('somethingHappened'));

并在您的类中为需要获取的数据创建一个get方法。

那么您在主应用程序中要做的就是

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

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

如果数据仍然是类成员,并且您希望避免创建新的事件类,则这种方法可能更合适。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM