[英]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.