欧芹命令解耦结果处理程序和观察者

时间:2015-06-03 09:21:47

标签: actionscript-3 flex model-view-controller parsley

我昨晚发了一个问题,读完后听起来很糟糕,所以我把它删了,又回来再试一次,这次正确。

我有一个使用Parsley的Flex移动应用程序,一切都按预期工作但我试图在我的控制器中使用一个解耦的结果处理程序,但它没有在我期望它时触发,所以希望指针为为什么。

命令如下所示:

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);
        }

现在它会触发,但我没有数据句柄。

我确实想过将命令execute方法更改为

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

毕竟它确实返回了AsyncToken,但是命令根本没有触发(它是映射到名为ChildEvent的事件的2命令序列的一部分,这是第二个也是最后一个事件。链条。

总而言之,我希望以上方法有效,但希望能够在分离的结果处理程序中管理结果,但我无法解决如何,欧芹手册非常适合达到这一点(http://www.spicefactory.org/parsley/docs/3.0/manual/?page=commands&section=intro),但更精细的细节有点粗略。

由于

1 个答案:

答案 0 :(得分:1)

通过对Controller代码的小调整,我们最终得到了这个:

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

OR

        [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

谢谢大家!