Flex AsyncToken для прослушивания кнопок окна оповещения - PullRequest
1 голос
/ 24 марта 2012

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

Пример:

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

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

1 Ответ

1 голос
/ 24 марта 2012

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

if(okClickedFunction)
    okClickedFunction();

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

EDIT:

[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, чтобы определить, была ли это одна из кнопок, которые вас интересуют.

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

...