Команда 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

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

Другие вопросы по тегам