我有一个主要的 flex 应用程序加载的小型 swf as3 flash 应用程序。
主 Flex 应用程序包含一个 SWFLoader,我在 SWFLoader.content 上添加了一个事件侦听器,以获取我准备的自定义事件。
现在每当我喜欢在应用程序中使用该函数dispatchEvent
来创建事件并确保事件的气泡参数为真时。所以在这种情况下,事件会在舞台上冒泡,直到它到达我的事件侦听器并且我可以正确处理事件。
当我有一个静态类并且我想从那里分派事件时,问题就存在了。因为它是一个静态类而不是出现在我的舞台上的显示对象,所以它没有冒泡的地方,因此即使在我的主 flex 应用程序中我也无法获取自定义。
我尝试使用带有以下代码的 eventDispatcher:
new EventDispatcher().dispatchEvent(new CustomEvent(CustomEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal)));
我的自定义事件的构造函数将参数作为第二个参数。
所以似乎当我使用事件调度程序时,事件仍然没有冒泡的地方,这就是为什么我也没有在我的主应用程序中收到它。
我该如何解决这个问题?我需要能够在舞台上没有出现的对象上正确调度事件。
main 我需要为这个函数提供一个出现在舞台上的对象,以便使用它来调度事件。我确实希望有更好的解决方案来解决这个问题。
任何信息将不胜感激。
这是我的自定义事件类:
public class CustomEvent extends Event
{
public var command:String;
public var params:Object;
public static const CONTROL_TYPE:String = "eMyControl";
private static var EVENT_setAttribute:String = "set_attribute";
private static var gameAttributes:Object = new Object();
public static function setAttribute(attrName:String,attrVal:String):void {
gameAttributes[attrName]=attrVal;
new EventDispatcher().(new XpoEvent(XpoEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal}));
}
public function CustomEvent(eventName:String, params:Object = null, bubbles:Boolean = true, cancelable:Boolean = false)
{
var _loc_6:String = null;
var _loc_5:String = "";
if (params != null)
{
_loc_5 = "params: ";
for (_loc_6 in params)
{
_loc_5 = _loc_5 + (_loc_6 + "=" + params[_loc_6] + " ");
}
}
trace("CustomEvent issued - " + eventName + " " + _loc_5);
super(CONTROL_TYPE, bubbles, cancelable);
this.command = eventName;
if (params != null)
{
this.params = params;
}
return;
}
}
正如您在此处看到的,我有一个名为 setAttribute 的静态函数,它将 attrName 和 Val 传递给一个数组,然后调度一个自定义事件。默认情况下,自定义类事件启用了气泡。似乎仍然是因为我没有使用舞台中出现的对象调度事件,因此主 flex 应用程序不允许正确捕获事件。
以下代码确实有效:
<object In Stage>.dispatchEvent(new CustomEvent("testme"));
谢谢