0

我有一个执行服务调用的命令。在结果处理程序中,我正在根据结果数据执行一些逻辑。如果逻辑符合特定标准,我将显示一个确认弹出窗口。如果用户单击确认弹出窗口中的继续按钮,我将调用一个方法,该方法将调度 Parsley 事件。Parsley 事件没有被捕获。但是,如果我从 result 方法内部调度 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?");
}

如果用户单击确认弹出窗口上的 Continue 按钮,它会调用 onSelection 方法:

private function onSelection():void
{
dispatcher(new SomeEvent(SomeEvent.UPLOAD));
}

Parsley 事件 SomeEvent 没有被捕获。但是,如果我在 if 语句之后调度该事件,它就会被捕获并且工作正常。知道为什么从结果处理程序外部调度它时没有被捕获吗?我也尝试过其他命令,它做同样的事情。

4

1 回答 1

1

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

命令对象生命周期

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

于 2013-04-18T20:02:53.920 回答