Flex - 欧芹 - 事件不会从结果处理程序中的方法发送

时间:2013-04-18 16:40:36

标签: flex events flexbuilder dispatcher parsley

我有一个执行服务调用的Command。在结果处理程序中,我根据结果数据做了一些逻辑。如果逻辑符合特定条件,我将显示确认弹出窗口。如果用户在确认弹出窗口中单击“继续”按钮,则会调用一个方法,该方法将调度Parsley事件。帕斯利事件没有被抓住。但是,如果我从结果方法中调度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语句之后调度该事件,它将被捕获并正常工作。知道为什么从结果处理程序外部调度时它没有被捕获?我也尝试过其他命令,它也做同样的事情。

1 个答案:

答案 0 :(得分:1)

在Spicefactory网站上找到这个,按设计工作。我最终更新了模型中的标志,而不是调度事件。然后我有一个BindSetter监听模型中该标志的更改。当该标志设置为true时,将调度Parsley事件。

命令对象生命周期

除了对执行方法和结果处理程序进行分组之外,DynamicCommand还为命令对象引入了一种特殊的生命周期管理。在调度匹配的消息之前,不会创建对象。然后,它仅在命令执行期间成为容器管理对象。 在调用结果或错误处理程序后,它将立即从Context中删除。但在其生命周期中,它是一个完全托管的对象,可以注入其依赖项,甚至在执行期间参与消息传递命令执行。但这是一个相当罕见的情况,最常见的使用场景可能是命令对象只是接收执行命令所需的所有依赖项。