2015-06-03 3 views
1

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

У меня есть приложение Flex Mobile, в котором используется Parsley, все работает так, как ожидалось, но я пытаюсь использовать развязанный обработчик результатов в моем контроллере, но он не срабатывает, когда я ожидаю, так что хотел бы указатель почему.

Команда выглядеть следующим образом:

public function execute():void 
    { 
     var asyncToken:AsyncToken = Db.Instance.ViewChildren(mainModel.loggedInUser.userId); 
     asyncToken.addResponder(new Responder(result, error)); 
    } 

    public function result(result:ResultEvent):void 
    { 
     callback(result.result); 
    } 

    public function error(event:FaultEvent):void 
    { 
     callback(event.fault); 
    } 

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

[CommandResult] 
     public function handleResult(result:AsyncToken):void 
     { 
      trace("result in the controller"); 
     } 
     [CommandError] 
     public function handleError(fault:AsyncToken):void 
     { 
      trace('error: ' + fault.fault.faultDetail); 
     } 

Ни один из этих слушателей огня, когда результат приходит, так что я сделал очевидную вещь и изменил код:

[CommandResult] 
     public function handleResult():void 
     { 
      trace("result in the controller"); 
     } 
     [CommandError] 
     public function handleError():void 
     { 
      trace('fault in controller); 
     } 

Теперь он выстреливает, но у меня нет ручки данных.

Я думаю, что изменения команды выполнить метод

public function execute():AsyncToken 
{ 
return Db.Instance.ViewChildren(mainModel.loggedInUser.userId); 
} 

, как после того, как все это возвращает AsyncToken, но тогда команда не срабатывает на всех (она является частью последовательности в 2 команды, которые сопоставляется с событием ChildEvent, это второе и последнее событие в цепочке.

Итак, я хочу, чтобы выше работала, но хочу иметь возможность управлять результатом в развязаном обработчике результатов, но Я не могу разобраться, как, руководство для петрушки отлично подходит для достижения этой цели (http://www.spicefactory.org/parsley/docs/3.0/manual/?page=commands&section=intro), но более тонкие детали немного отрывочны.

Благодаря

+0

После многих испытаний я обнаружил, что все, что мне нужно знать, это то, что я должен положить между скобками в обработанном обработчике результата, чтобы я мог видеть результат, после того как все это длинное сообщение сводится к такому. [CommandResult] public function handleResult (event: - what is here here): void { trace ("result the controller"); } [CommandError] public function handleError (ошибка: - что здесь происходит): void { след (ошибка в контроллере); } Это упрощает управление как вопрос :) –

+0

Что-то примечание, когда я запускаю приложение с кодом, как указано выше, команда вызывается и обработчик результата в команде запускается, result ', но тогда также и [ErrorHandler] в контроллере, он отслеживает «ошибку в контроллере». Могло бы серьезно относиться к пониманию здесь, потому что это бессмысленно. Thanks –

+0

Проверьте, добавляет параметр типа «Событие», тот тип, который является базой всех событий каркаса Parsley, позволит вызвать обратные вызовы. Если да, используйте 'event.info' или более точный параметр для запроса результата. На самом деле я не нашел места в руководстве, на котором вы ссылаетесь, где контроллеры представлений описываются такими кодами с квадратными скобками, поэтому, возможно, будет полезно найти нужную страницу. – Vesper

ответ

1

С небольшой подстройкой к коду контроллера, мы в конечном итоге с этим:

 [CommandResult(type="view.user.UserEvent", selector="loadUser")] 
     public function handleResult(result:Object):void 
     { 
      trace("this is the command result"); 
     } 

ИЛИ

 [CommandResult(selector="loadUser")] 
     public function handleResult(result:Object, trigger:UserEvent):void 
     { 
      trace("this is the command result"); 
     } 

Сейчас этот огнем, я получаю объект с моим данным в, разрешен.

Было бы полезно отметить, что в руководстве по Parsley 3.0 отсутствует раздел, в котором объясняется, как это работает. В конце концов я нашел его в руководстве Parsley 2.2 (эквивалентная часть в руководстве 3.0 была удалена!) Но если вам когда-нибудь понадобится http://www.spicefactory.org/parsley/docs/2.2/manual/messaging.php#command_methods

Спасибо всем!

Смежные вопросы