好吧这可能听起来很愚蠢,但我是Flex编程的初学者。
我有一个带有.mxml主文件的应用程序,以及我从.mxml调用的某个类Foo
在Foo中,我创建了一个URLRequest并监听Complete事件。然后我发现自己在Foo函数中返回了数据,但我不知道如何将它传递给应用程序的.mxml部分!我查看了ArrayCollections,但我似乎无法理解它们是如何工作的以及它是否有用。难道没有办法从类内部修改具有全局范围的变量吗?
答案 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);
}
如果数据应该是一个类成员,并且你想避免创建一个新的事件类,这种方式可能更合适。