Команда Parsley отделила обработчиков результатов и наблюдателей
Вчера вечером я опубликовал вопрос, который после прочтения звучал ужасно, поэтому я удалил его и вернулся, чтобы повторить попытку, на этот раз правильно.
У меня есть мобильное приложение Flex, которое использует 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§ion=intro), но более мелкие детали немного отрывочны.
Спасибо
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
Спасибо всем!