0

サービス呼び出しを実行するコマンドがあります。結果ハンドラーでは、結果データに基づいていくつかのロジックを実行しています。ロジックが特定の基準を満たしている場合、確認ポップアップを表示しています。ユーザーが確認ポップアップの [続行] ボタンをクリックすると、呼び出されるメソッドがあり、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?");
}

ユーザーが確認ポップアップで [続行] ボタンをクリックすると、onSelection メソッドが呼び出されます。

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

そのパセリ イベント SomeEvent はキャッチされていません。ただし、if ステートメントの後にそのイベントをディスパッチすると、キャッチされて正常に動作します。結果ハンドラーの外部からディスパッチされたときにキャッチされない理由は何ですか? 他のコマンドも試してみましたが、同じことをします。

4

1 に答える 1

1

Spicefactory サイトでこれを見つけ、設計どおりに動作します。イベントをディスパッチするのではなく、モデルのフラグを更新することになりました。次に、モデル内のそのフラグへの変更をリッスンする BindSetter を用意します。フラグが true に設定されると、Parsley イベントが送出されます。

コマンド オブジェクトのライフサイクル

実行中のメソッドと結果ハンドラーをグループ化することとは別に、DynamicCommand は、コマンド オブジェクトの特別な種類のライフサイクル管理も導入します。一致するメッセージがディスパッチされるまで、オブジェクトの作成は行われません。その後、コマンドの実行中だけコンテナ管理オブジェクトになります。結果またはエラーハンドラーが呼び出された後、コンテキストからすぐに削除されます。しかし、その存続期間中は、完全に管理されたオブジェクトであり、依存関係を注入したり、コマンドの実行中にメッセージングに参加したりすることさえできます。しかし、それはかなりまれなケースです。最も一般的な使用シナリオは、おそらく、コマンドを実行するために必要なすべての依存関係を受け取っているコマンド オブジェクトです。

于 2013-04-18T20:02:53.920 に答える