1

純粋な MVC -

私のアプリケーションには、Windows デスクトップのように最小化された複数の画面があります。現在、それぞれに同じ通知を持つメディエーターの異なるインスタンスがあります。したがって、ある画面で変更を行うと、いくつかのボタンを押す>>コマンドが送信され、>>プロキシに>>プロキシが通知をメディエーターに送信します。

しかし、複数の画面がアクティブであるため、プロキシからも通知されるため、すべての画面で変更が表示されます。

メディエーターのすべてのライブ インスタンスではなく、特定のビュー コンポーネント (メディエーター) へのプロキシ呼び出しを確認するにはどうすればよいですか?

4

2 に答える 2

0

質問の言い方は、いずれかの画面でボタンを押して、そのビューを更新したいということです。ビューがメディエーターにイベントをディスパッチする必要があります。プロキシからのビジネス ロジックまたはデータが必要な場合にのみ、コマンド層に通知を送信する必要があります。プロキシに通知しているとのことで、プロキシからの FRESH データが必要である、つまりバックエンドから新しいデータを要求していると思われます。新しいデータが取得されると、メディエーターに通知が送信され、ビューが新しいデータで更新されます。データが変更された場合、アプリケーションの残りの部分を更新する必要があります。

すべてのメディエーターがこのデータを気にかけているわけではない場合は、さまざまなウィンドウのメディエーターをサブクラス化し、'execute' メソッドをオーバーライドする必要があります。

于 2015-04-05T14:06:59.687 に答える
0

PureMVC 構造では、プロキシ通知はメディエーターのすべてのインスタンスに送信されますが、選択したコンポーネント以外のすべてのコンポーネントに対して実行されるアクションを制限できます。

  • ボタンのクリック時に、選択したコンポーネントをシングルトン クラス変数に割り当てます
  • 以下のようにメディエーターのhandleNotification関数でIDを確認してください

例:

    public static const ADD_BOLD_STYLE:String = "AddBoldStyle";

    public function TextElementMediator(objViewComponent:Object)
    {
        super(NAME, objViewComponent);
        _objTextData = objTextData; 
    }

    public function get textElement():TextElement
    {
        return viewComponent as TextElement;
    }

    override public function listNotificationInterests():Array
    {
        return [ADD_BOLD_STYLE];
    }

    override public function handleNotification(notification:INotification):void
    {
        switch(notification.getName())
        {               
            case ADD_BOLD_STYLE:
                if(textelement == singleton.selectedObject)
                {
                    //Process your data
                }
                break;
        }
    }

ここで singleton は selectedObject を指します

于 2011-12-20T09:26:43.297 に答える