2011-12-19 10 views
0

デスクトップアイコンを表す「デスクトップ」とすでに開いているウィンドウを最小化/復元するためのボタンがあるタスクバーを表す「タスクバー」という2つのコントローラを持つデスクトップのようなアプリケーションがあります。 MS Windowsのように働いています。別のコントローラに属しているビューを変更する

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

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

私は、現時点では私の心の中で3つのアイデアている:デスクトップコントローラは、直接TaskbarViewにボタンを

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

私の質問は以下のとおりです。

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

どんな答え

答えて

1

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

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

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

+0

私はここに提案を追加しています:あなたはデスクトップコントローラー(親コントローラーを必要とせず)からデスクトップコントローラーにthis.getController( 'controllerName')を書き込むか、デスクトップコントローラーにthis.application.getController( 'controllerName')もっと論理的だと感じます。 –

関連する問題