他のコントローラに属するビューの変更

デスクトップアイコンを表す「デスクトップ」と、MS Windowsが動作しているように、既に開いているウィンドウを最小化/復元するためのボタンが見つかるタスクバーを表す「タスクバー」というデスクトップのようなアプリケーションがあります。

私が現在持っている問題は、「どのようにウィンドウを表示すべきか」というアプローチです。実際にアイコンをダブルクリックしたら、ウィンドウを作成する必要があります。これは、デスクトップコントローラーまたはタスクバーコントローラー(または、どこかでドラッグできるため、ビューポート上で直接行うこともできます)の両方で発生する可能性があります。ただし、ウィンドウを作成するときは、タスクバーに新しいボタンを作成して最小化/復元する必要があります。

このため、私はタスクバーコントローラのウィンドウを処理することを考えましたが、デスクトップコントローラからタスクバーコントローラに到達する方法はわかりません。

私は現時点で3つの考えを持っています:

  1. デスクトップコントローラはタスクバービューにボタンを直接追加しますが、このようにMVCパターンに違反しているような気がします。また、デスクトップビューでTaskbarViewを指定する必要があります。
  2. アイコンをダブルクリックしたデスクトップコントローラは、タスクバーコントローラ上でカスタムイベントを発生させます。この場合、タスクバーはウィンドウを開き、ボタンを追加しますが、このアプローチはまったくリニアではありますが、他のコントローラからコントローラを参照する方法(この場合はわからない 、デスクトップからタスクバーに)
  3. デスクトップコントローラのitemdblclickイベントのExt.Applicationレジスタ。このイベントが発生すると、タスクバーコントローラでリダイレクト(またはカスタムイベントの呼び出し)されます。この後、すべてがポイント2のようになります。このようにして(レールのような)ルーティング機能を集中化しますが、アプリケーションオブジェクトが本当に大きくなる可能性もあります。また、私はそれを "巨大なコントローラ"として使用してすべてをルーティングしていますが、これは大きな問題ではありません。レールについて考えてみてください。
  4. アプリケーションを2つのコントローラに分割しないでください(デスクトップとタスクバーは1つにする必要があります)。私はこのアプローチが正しいとは思わない。

So, my questions are:

  • どちらのアプローチをとるべきですか:1,2,3,4(または別のものがあるかどうかを指定します)
  • ウィンドウが属するもの:デスクトップコントローラ、タスクバーコントローラ、その他何か?

すべての回答ありがとう

0

1 答え

私はあなたに似た設定をしています。個人的に私は選択肢2に行くでしょう。これに対処するにはいくつかの方法があります。 1つは、デスクトップとタスクバーの両方を子として持つ親を持ち、2つの間の通信を管理できることです。親が聴くカスタムイベントを作成し、それらを正しい子に誘導することができます。

たとえば、親はタスクバーとデスクトップの両方を作成し、デスクトップ上のアイコンクリックイベントを待ち受けます。アイコンのクリックイベントが発生すると、親はイベントを受け取り、次に何を行う必要があるかを内部的に判断します。この場合、タスクバーを呼び出してその上に開いているウィンドウのボタンを作成する必要があることがわかります。

また、JavaScriptでMediatorデザインパターンを使用して、送信者とリスナーを登録することもできます。デスクトップをアイコンクリックイベントの送信者とし、タスクバーをこれらのイベントのリスナーにすることができます。アイコンをクリックすると、メディエータに設定されているすべてのリスナーにイベントが送信されます。あなたはそれを管理するために親を必要としません。しかし個人的に私は親がもっと好きです。

1
追加された
私はここに提案を追加します:あなたはデスクトップコントローラー(親コントローラーを必要とせず)からデスクトップコントローラーにthis.getController( 'controllerName')を書くか、より論理的な感じのthis.application.getController( 'controllerName')を書くことで簡単にコントローラーを参照できます。
追加された 著者 Fire-Dragon-DoL,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript