1

私のアプリは、モデルによってディスパッチされたイベントに応答してビューを更新します。しかし、モデルが変更されていないのに、ビューを更新する必要がある場合はどうでしょう。たとえば、ポップアップを閉じて再度開きました。表示されるデータは変更されていませんが、ポップアップ メディエーターとビューを再作成する必要があります。私の現在の解決策は、次のようにメディエーターの onRegister() メソッドで初期化を強制することです。

// Inside of PopUpMediator.as

[Inject]
public var popUpModel:IPopUpModel;

[Inject]
public var popUpView:PopUpView;

override public function onRegister()
{
    // Force initialization if the model hasn't changed
    popUpView.foo = popUpModel.foo;

    // Event based initialization
    addContextListener(PopUpModelEvent_foo.CHANGE, foo_changeHandler);        
}

モデルをメディエーターに注入するのは良い考えではないので、モデルが変更されていないときにビューを初期化する最良の方法は何ですか?

4

2 に答える 2

0

というイベントを追加することにしましたPopUpViewInitEvent。コマンドは、ポップアップが閉じられている間にモデルが更新されたかどうかを確認します。そうでない場合は、 をディスパッチしてビューを再初期化しますPopUpViewInitEvent。イベントには、ビューの初期化に必要なすべてのデータが含まれます。こうすれば、メディエーターにモデルを注入する必要がなくなります。

[Inject]
public var popUpView:PopUpView;

override public function onRegister()
{
    // Batch initialization
    addContextListener(PopUpViewInitEvent.INIT, batchInit);

    // Gradual initialization
    addContextListener(PopUpModelEvent_foo.CHANGE, foo_changeHandler);        
    addContextListener(PopUpModelEvent_bar.CHANGE, bar_changeHandler);        
}

protected function batchInit(event:PopUpViewInitEvent)
{
    popUpView.foo = event.foo;
    popUpView.bar = event.bar;
}
于 2013-11-07T08:10:02.933 に答える
0

良い、

ポップアップボタンがあるView1があると思います。

View2 は popus です。

そのため、View1 ボタンがクリックされると、メイン メディエーターから popupCommand に送られるイベントをディスパッチします。ここで、ポップアップを contextView に追加するか、ポップアップを削除します。

モデル内に popupVisible という状態を 1 つ持つこともできます。そのプロパティを変更すると、メイン メディエーターでリッスンされ、ポップアップを追加または削除するイベントがディスパッチされます。その場合、コマンドは popup を contextView に直接追加するのではなく、モデル プロパティを変更します。

3 番目の方法は、ポップアップをビュー内に手動で追加することです。ステージはロボットレッグによってリッスンされているため、ポップアップは自動的に仲介されます。

于 2013-11-06T22:23:55.547 に答える