6

クイックコンテキスト:アプリケーションビューには2つのアウトレットがあります。1つはツールバー用です。もう1つは、ルーティング可能な「メイン」ビュー階層用です。

app -- main
   \-- toolbar

「メイン」ビューでイベントをトリガーするには、ツールバーにいくつかのボタンが必要です。どのモデルのデータも更新しないでください。ビューが表示している図面ライブラリにいくつかの変更をトリガーするように指示するだけです。キャンバスをクリアしたり、ズーム値をリセットしたりします。

1.0 pre2以前では、actionsとrouter.get('someController.view')を使用して、必要なビューにアクセスし、action / method/eventをトリガーしました。アプリケーション設計の頂点はほとんどありませんが、問題なく機能しました。

このオプションはなくなり、私は良い選択肢を見つけることができなくなりました。子/親階層にないビュー間で通信する場合、どのメカニズムを使用する必要がありますか?私が思いついたものはすべて不格好で、「燃えさしにはもっと良い方法がある」という私の感覚を引き起こします。

要するに私は欲しい:

  • イベントをトリガーするためのツールバーボタン
  • これに反応し、それ自体の一部でいくつかの更新を実行するためのメインビュー。
  • ルーティングを介した場合のように、Emberの意味で再レンダリングしないという主な見解。描画ライブラリを使用し、そのすべてのプロパティと動作をEmberモデルとコントローラーに統合するのはそれほど楽しいことではありません。
  • ツールバーとメインビューは親ビューを共有しますが、異なる「ブランチ」にあります。

私が検討している貧弱なオプション:

ツールバーはアプリケーションレベルの問題ですが、特定のビューを指示する必要のあるボタンがいくつかあります。Ember内に表示されるオプションの1つは、「メイン」ビューの下にツールバーをネストすることです。これは、他の機能の一部では間違っているようです。

通信は、ツールバーが設定するプロパティと「リスニング」ビューが反応しての値をリセットするプロパティを保持するコントローラー(および場合によってはモデル)によって処理できます。これは、コントローラーとモデルの目的の乱用のように聞こえ、イベントリスナーのセットアップがかなり貧弱なように聞こえます。

描画ライブラリをApp.Drawingなどのグローバルなアプリケーションにすることもできますが、それも悪いようです。また、アクションは、ビュー内のデータを使用して図面ライブラリを更新することができないことも意味します。

助言がありますか?

4

1 に答える 1

2

子/親階層にないビュー間で通信する場合、どのメカニズムを使用する必要がありますか?

通常の残り火アプリケーションでは、この通信はコントローラー間で発生する必要があります。それ以外の場合、「PoorOption2」は正しい方向に進んでいます。

通信は、ツールバーが設定するプロパティと「リスニング」ビューが反応しての値をリセットするプロパティを保持するコントローラー(および場合によってはモデル)によって処理できます。

2つのコントローラーの使用を検討してください。ツールバーのアクションはToolbarController、を対象とします。これは、ツールバーの状態を維持し、ユーザーのアクションに応じてメインを変更する役割を果たします。プロパティを介してToolbarController依存関係を宣言する必要があります。例えば:MainControllerneeds

App.ToolbarController = Ember.Controller.extend({
  needs: ['main'],
  buttonOneGotAllPressed: function() {
    main = this.get('controllers.main');
    main.turnOffAnOption();
    main.makeSomeOtherChange();
  }
}); 

これMainControllerで、MainViewの状態に焦点を当てることができます。それは気づいてはいけません、ToolbarControllerまたはそれはボタンです。

これは、コントローラーとモデルの目的の乱用のように聞こえ、イベントリスナーのセットアップがかなり貧弱なように聞こえます。

それはモデルの目的の乱用である可能性が高いことに同意しましたが、それはまさにコントローラーの目的です。

これは間違いなくイベントリスナーの設定ではありませんが、あなたのケースには適していないようです。説明するツールバーは、メインビューと対話するためだけに存在するように見えるため、メインに依存して直接対話するツールバーコントローラーを用意することは理にかなっています。

コンポーネントが本当に分離されている場合は、オブザーバー(Pub / Sub)パターンの方が適切な場合があります。興味がある場合は、別のフレームワークからEmberにイベントを発生させる方法を参照してください。

于 2013-01-30T20:14:55.620 に答える