我一直在寻找问题的答案,我想我可能走在正确的轨道上,但我无法理解如何实施解决方案。我需要帮助。
我有一个类,RootPackage.Utils.SelectableGraphic.as,一个小部件,RootPackage.Widgets.WidgetWithSelection.mxml和一个自定义事件,RootPackage.Events.SelectableGraphicEvent。
SelectableGraphic调度SelectableGraphicEvents,WidgetWithSelection侦听这些事件。我的活动如下:
{
import RootPackage.utils.SelectableGraphic;
import flash.events.Event;
public class SelectableGraphicEvent extends Event
{
public static const GRAPHIC_ADDED:String = 'Graphic_Added';
public static const GRAPHIC_CLICKED:String = 'Graphic_Clicked';
private var graphic:SelectableGraphic;
public function SelectableGraphicEvent(type:String, gra:SelectableGraphic, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
graphic = gra;
}
override public function clone():Event
{
return new SelectableGraphicEvent(type, graphic, bubbles, cancelable);
}
public function get Graphic():SelectableGraphic
{
return graphic;
}
}
我的发送如下:
lastDrawnGraphic = new SelectableGraphic(...);
lastDrawnGraphic.dispatchEvent(new SelectableGraphicEvent(SelectableGraphicEvent.GRAPHIC_ADDED, lastDrawnGraphic, true));
我的听力功能看起来像这样:
private function SelectableGraphic_ClickHandler(event:SelectableGraphicEvent):void
{
gra:SelectableGraphic = event.Graphic;
...
}
在进入监听功能之前,它在WidgetWithSelection中的发送和接收之间崩溃。如果我改变监听功能标题以收听基本事件,那么它不会崩溃但是,当我尝试获取event.Graphic时,它会产生相同类型的强制错误。我尝试了很多工作,例如接收正常事件,将其转换为SelectableGraphicEvent并使用它。在这种情况下,强制转换操作返回空值。
类型强制错误类似于:错误#1034:类型强制失败:无法将RootPackage.Events :::SelectableGraphicEvent @ b56b071转换为RootPackage.Events.SelectableGraphicEvent。
无论如何,我已经阅读了一些关于此的内容,我相信这可能是由于这些类与我的主应用程序在不同的应用程序域中或者是那种效果。显然有一种方法可以改变应用程序域,但我只是不知道如何做到这一点。这让我感到困惑,正如你可能从最后一段所说的那样。是否有更简单的答案或任何人都可以向我解释我应该做什么?
谢谢,
Ggilmann
编辑添加:
这是添加EventListener的部分。 open()在Added_To_Stage事件上,close()在Remove_From_Stage上:
private function open():void
{
this.map.addEventListener(SelectableGraphicEvent.GRAPHIC_CLICKED, SelectableGraphic_ClickHandler);
this.map.addEventListener(SelectableGraphicEvent.GRAPHIC_ADDED, SelectableGraphic_AddedHandler);
_selectableGraphics = GetSelectableGraphics();
}
private function close():void
{
this.map.removeEventListener(SelectableGraphicEvent.GRAPHIC_CLICKED, SelectableGraphic_ClickHandler);
this.map.removeEventListener(SelectableGraphicEvent.GRAPHIC_ADDED, SelectableGraphic_AddedHandler);
ClearSelection();
}
基本上,有一个地图包含一个包含可选图形的图形层。因此,当我从SelectableGraphic发送时,事件会冒泡到地图(以及更远)。地图捕获事件并触发相应的SelectableGraphic_EventHandler。