У меня следующая ситуация:
У меня есть обработчик событий, который отображает небольшие сообщения в строке состояния моего приложения.Эти сообщения проходят через диспетчеризацию событий от пользовательских компонентов.Простое сообщение может выглядеть как «Ошибка HTTP» или около того.
Теперь прослушиватель основного события в главном файле приложения прослушивает событие, отправленное любым пользовательским компонентом, но, похоже, отказывается от прослушивания отправленных событий.с помощью пользовательских классов AS.
Вот мой код для пользовательского события:
package main.events
{
import flash.events.Event;
public class ShowNoticeEvent extends Event
{
public var message:String;
public static const SHOW_NOTICE:String = "showNotice";
public function ShowNoticeEvent(type:String, msg:String, bubbles:Boolean = false, cancelable:Boolean = false)
{
super(type, bubbles, cancelable);
this.message = msg;
}
override public function clone():Event
{
return new ShowNoticeEvent(type, message);
}
}
}
Это прослушиватель событий в главном файле приложения:
addEventListener(ShowNoticeEvent.SHOW_NOTICE, showNoticeListener, true);
Иэто пользовательский класс AS, который отправляет пользовательское событие.Я вставил весь код, чтобы вы могли видеть всю его часть.
package components.dashboard
{
import components.dashboard.models.*;
/* Event imports */
import flash.events.*;
import main.events.*;
import mx.controls.Alert;
import mx.core.UIComponent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
[Event(name="showNotice", type="main.events.ShowNoticeEvent")]
public class Controller extends UIComponent
{
private var baseUrl:String;
public function Controller(baseUrl:String)
{
this.baseUrl = baseUrl;
}
public function getRunningQuotations():void
{
var runningQuotationsList:RunningQuotationsList = RunningQuotationsList.getInstance();
execService("index.php?a=1", runningQuotationsList.updateList, "pnlRunningQuotations");
}
public function getRecentProjects():void
{
var recentProjectsList:RecentProjectsList = RecentProjectsList.getInstance();
execService("index.php?a=2", recentProjectsList.updateList, "pnlRecentProjects");
}
public function getLatestCustomers():void
{
var latestCustomersList:LatestCustomersList = LatestCustomersList.getInstance();
execService("index.php?a=3", latestCustomersList.updateList, "pnlLatestCustomers");
}
private function execService(url:String, listener:Function, component:String):void
{
var basicService:HTTPService = new HTTPService(baseUrl);
basicService.showBusyCursor = true;
basicService.addEventListener(FaultEvent.FAULT, function(e:FaultEvent):void{httpFault(e, component)});
basicService.method = "POST";
basicService.resultFormat = "text";
basicService.url = url;
basicService.addEventListener(ResultEvent.RESULT, listener);
basicService.send();
}
private function httpFault(event:FaultEvent, component:String = null):void {
var faultstring:String = event.fault.faultString;
var eventObj:ShowNoticeEvent = new ShowNoticeEvent(ShowNoticeEvent.SHOW_NOTICE, faultstring, true);
dispatchEvent(eventObj);
trace(faultstring);
}
}
}
Итак, чтобы подвести итог всего этого: - слушатель событий прослушивает пользовательское событие, отправляемое любым пользовательским компонентом.- Слушатель событий не слушает пользовательское событие, отправленное классом AS.
Те, кто задается вопросом, действительно отправляют событие, поэтому я добавил вызов трассировки.