Flex AsyncToken для прослушивания кнопок окна оповещений

Могу ли я прослушивать нажатие кнопки Alert между компонентами, используя AsyncToken? По сути, я хочу иметь метод, который открывает Alert с кнопками и возвращает AsyncToken, чтобы другие компоненты, вызывающие этот метод, могли прослушивать нажатие кнопок.

Пример:

var token:AsyncToken=methodThatOpensAlert();
token.addResponder(new mx.rpc.Responder(buttonClick));

Какой способ сделать это? Спасибо.

1 ответ

Решение

Вы можете использовать AsyncToken для достижения этой цели, но вы также можете просто зарегистрироваться для пользовательских событий, которые вы отправляете из всплывающего окна, это намного более чистый метод IMO. На самом деле у меня есть два относительно чистых варианта, которые я могу придумать. 1 вы делаете всплывающие события отправки, такие как "okClicked", "cancelClicked" для различных нажатий кнопок во всплывающем окне, вы создаете экземпляр всплывающего окна и добавляете прослушиватели, затем вызываете PopUpManager.addPopUp, или же вы делаете PopUpManager.createPopUp и сохраните ссылку на возвращенный экранный объект (экземпляр созданного им всплывающего окна), а затем добавьте своих слушателей. 2 вы делаете два свойства во всплывающем окне, которые вводятся как функция, вы используете их как обратные вызовы, поэтому при создании всплывающего окна вы устанавливаете okClickedFunction и cancelClickedFunction (или какими бы ни были ваши кнопки), а затем во всплывающем окне, которое вы помещаете Обработчики cilck на кнопках, проверьте, установлена ​​ли соответствующая функция обратного вызова, и вызовите ее, если так, например,

if(okClickedFunction)
    okClickedFunction();

Дайте мне знать, если у вас есть особая потребность, которая заставляет вас думать, что вы должны использовать AsyncToken, но из проверки документов выглядело так, будто она строго предназначена для работы с другими методами RPC, а многие свойства доступны только для чтения.

РЕДАКТИРОВАТЬ:

[SomeUtilClass.as]

private static function methodThatOpensAlert():CustomAlert
{
    return PopUpManager.createPopUp(Application.application, CustomAlert) as CustomAlert;
}

[CustomAlert.as]

[Event(type="flash.events.Event", name="button1Clicked")]
[Event(type="flash.events.Event", name="button2Clicked")]

private function button1Clicked_handler(event:MouseEvent):void
{
    dispatchEvent(new Event("button1Clicked", true));
}
private function button2Clicked_handler(event:MouseEvent):void
{
    dispatchEvent(new Event("button2Clicked", true));
}

[ThingThatUsesAlert]

var ca:CustomAlert = SomeUtilClass.methodThatOpensAlert();
ca.addEventListener("button1Clicked", button1ClickHandler);
ca.addEventListener("button2Clicked", button2ClickHandler);

И я считаю, что события мыши по умолчанию всплывают, так что вы можете просто прослушать событие щелчка во всплывающем окне, а затем использовать event.target, чтобы определить, была ли это одна из кнопок, которые вас интересуют.

Дайте мне знать, если вы можете понять это или вам нужно больше информации.

Другие вопросы по тегам