2013-04-18 1 views
0

У меня есть команда, которая выполняет служебный вызов. В обработчике результатов я делаю некоторую логику, основанную на данных результата. Если логика соответствует определенным критериям, я показываю всплывающее окно подтверждения. Если пользователь нажимает кнопку «Продолжить» во всплывающем окне подтверждения, у меня есть метод, который вызывается, который отправляет событие Parsley. Это событие Parsley не поймано. Однако, если я отправлю событие Parsley из метода результата, он будет пойман. Любая идея, почему событие не попадает при отправке его вне метода результата?Flex - Parsley - событие не будет отправлено из метода в обработчике результатов

Например ...

[MessageDispatcher] 
[Bindable] 
public var dispatcher:Function; 

я выполнить некоторый вызов службы внутри команды:

public function execute(event:SomeEvent):AsyncToken 
{ 
return service.callService(event.type, false); 
} 

у меня теперь есть результат обработчик вроде этого:

public function result(data:Object):void 
{ 
if (add some logic here based off data) 
AlertHelper.showContinueQuestion(onSelection, "Are you sure you want to continue?"); 
} 

Если пользователь нажимает кнопку «Продолжить» во всплывающем окне подтверждения, вызывает метод onSelection:

private function onSelection():void 
{ 
dispatcher(new SomeEvent(SomeEvent.UPLOAD)); 
} 

Это событие Parsley, SomeEvent, не попадается. Однако, если я отправлю это событие после утверждения if, он будет пойман и работает нормально. Любая идея, почему ее не поймают при отправке извне обработчика результата? Я тоже пробовал в других командах, и он делает то же самое.

+0

Можем ли мы увидеть вашего обработчика, который должен ловить SomeEvent, и где он прикреплен? –

+0

Возможно, это связано с тем, что динамическая команда удаляется из контекста петлицы, как только обработчик результата завершил выполнение. Хотя это странно, я бы догадался, что ваш введенный [MessageDispatcher] все равно сможет отправить событие ... Можете ли вы подтвердить, что метод 'onSelection()' вызывается и что 'dispatcher' не является нулевым? Обычно я использую отдельную команду для запуска предупреждения ... то есть в обработчике результатов вы отправляете событие «показать предупреждение». Команда «show alert» может затем вернуть «AsyncToken» и иметь собственный обработчик результатов. –

+0

Эндрю, я использую конфигурационный файл, содержащий DynamicCommand: anad2312

ответ

1

Обнаружено это на сайте Spicefactory, работает как предусмотрено. Я закончил обновление флага в Модели, а не диспетчеризацию события. Затем у меня есть BindSetter, который прослушивает изменения этого флага в модели. Когда флаг установлен в true, отправляется событие Parsley.

Lifecycle Command Object

Помимо группирования метода выполняющегося и результат Обработчики DynamicCommand также вводит особый вид управления жизненного цикла для командных объектов. Создание объекта происходит не до тех пор, пока не будет отправлено соответствующее сообщение. Затем он становится объектом, управляемым контейнером, только на время выполнения команды. Он сразу же будет удален из контекста после вызова результата или обработчика ошибок. Но при его жизни это полностью управляемый объект, может вставлять свои зависимости или даже принимать участие в обмене сообщениями во время выполнения команды. Но это был бы довольно редкий случай, наиболее распространенным сценарием использования, вероятно, является объект команды, который получает все зависимости, необходимые для выполнения команды.