Чтобы использовать параметры передачи в некотором случае, я использовал пользовательские события. У меня есть TabbedViewNavigatorApplication
для мобильных телефонов. В котором у меня есть пара взглядов. Через определенный промежуток времени 1 из просмотров открывается окно (рейтинг приложения), в котором есть 3 варианта (1. ставка сейчас, 2. напомнить позже, 3. Не напомните).Понимание пользовательского обработчика ActionScript 3
Я создал пользовательское событие CustomMouseEvent
(есть хороший сайт here for generating custom event), который может принимать дополнительный параметр типа объекта. У меня есть компонент для этого всплывающего окна RatePrompt
, у которого есть обработчики кликов для 3 вариантов оценки. Эти обработчики кликов, в свою очередь, строят параметры и отправляют это настраиваемое событие в другое представление, которое может обрабатывать это отправленное событие, но каким-то образом событие не может достичь второй отправки ratingPromptHandler
.
В HomeView я использую
<fx:Declarations>
<components:RatePrompt id="rateMessage"/>
</fx:Declarations>
RatePrompt компонент
<fx:Script>
<![CDATA[
.
.
.
protected function okClick(event:MouseEvent):void
{trace("OK");
var params:Object = new Object();
params[Tables.RATE_REMINDER]=Tables.YES;
var eventToBeDispatched:CustomMouseEvent = new CustomMouseEvent(CustomMouseEvent.CLICKED,params);
dispatchEvent(eventToBeDispatched);
closeMe(event);
}
protected function remindClick(event:MouseEvent):void
{trace("remind");
var params:Object = new Object();
params[Tables.RATE_REMINDER]=Tables.NO;
var eventToBeDispatched:Event = new CustomMouseEvent(CustomMouseEvent.CLICKED,params);
dispatchEvent(eventToBeDispatched);
closeMe(event);
}
protected function neverClick(event:MouseEvent):void
{trace("never");
var params:Object = new Object();
params[Tables.RATE_REMINDER]=Tables.NEVER;
var eventToBeDispatched:Event = new CustomMouseEvent(CustomMouseEvent.CLICKED,params);
dispatchEvent(eventToBeDispatched);
closeMe(event);
}
]]>
</fx:Script>
.
.
<s:Button id="btnOK" label="Ok" width="50" height="30" styleName="stylableButton" click="okClick(event)"/>
<s:Button id="btnRemind" label="Not now" width="85" height="30" styleName="stylableButton" click="remindClick(event)"/>
<s:Button id="btnNever" label="Never" width="85" height="30" styleName="stylableButton" click="neverClick(event)"/>
.
.
класса пользовательского события
import flash.events.Event;
public class CustomMouseEvent extends Event
{
public static const CLICKED:String = "clicked";
private var _parameter:Object;
public function CustomMouseEvent(type:String, parameter:Object, bubbles:Boolean = false, cancelable:Boolean = false):void {
super(type, bubbles, cancelable);
_parameter = parameter;
}
public function get parameter():Object {
return _parameter;
}
override public function clone():Event {
return new CustomMouseEvent(type, _parameter, bubbles, cancelable);
}
override public function toString():String {
return formatToString("CustomMouseEvent", "type", "parameter", "bubbles", "cancelable", "eventPhase");
}
}
И в представлении я открыть всплывающее окно и добавить обработчик событий и обработчик
public function popupRateMessage():void
{
PopUpManager.addPopUp(homeView.rateMessage, homeView.homeContainer as DisplayObjectContainer, false);
PopUpManager.centerPopUp(homeView.rateMessage);
homeView.rateMessage.y=this.homeView.stage.fullScreenHeight/2-(homeView.rateMessage.height/2);
homeView.rateMessage.message = Constants.RATE_REMINDER_PROMPT;
trace("AAA");
homeView.rateMessage.btnOK.addEventListener(CustomMouseEvent.CLICKED, ratingPromptHandler);
homeView.rateMessage.btnNever.addEventListener(CustomMouseEvent.CLICKED, ratingPromptHandler);
homeView.rateMessage.btnRemind.addEventListener(CustomMouseEvent.CLICKED, ratingPromptHandler);
}
private function ratingPromptHandler(event:CustomMouseEvent):void {
trace(event.parameter);
trace(event.parameter[Tables.RATE_REMINDER]);
}
Во время отладки я могу увидеть только результаты нижеуказанных трасс при нажатии btnOK
. Событие не может достигнуть ratingPromptHandler
обработчика.
AAA
OK
Пожалуйста, помогите мне в указании путей, которые я могу исправить. Спасибо
Спасибо и да я могу использовать 'CLASS.ratingPromptHandler (PARAMS);' – abi1964