クイックコンテキスト:アプリケーションビューには2つのアウトレットがあります。1つはツールバー用です。もう1つは、ルーティング可能な「メイン」ビュー階層用です。
app -- main
\-- toolbar
「メイン」ビューでイベントをトリガーするには、ツールバーにいくつかのボタンが必要です。どのモデルのデータも更新しないでください。ビューが表示している図面ライブラリにいくつかの変更をトリガーするように指示するだけです。キャンバスをクリアしたり、ズーム値をリセットしたりします。
1.0 pre2以前では、actionsとrouter.get('someController.view')を使用して、必要なビューにアクセスし、action / method/eventをトリガーしました。アプリケーション設計の頂点はほとんどありませんが、問題なく機能しました。
このオプションはなくなり、私は良い選択肢を見つけることができなくなりました。子/親階層にないビュー間で通信する場合、どのメカニズムを使用する必要がありますか?私が思いついたものはすべて不格好で、「燃えさしにはもっと良い方法がある」という私の感覚を引き起こします。
要するに私は欲しい:
- イベントをトリガーするためのツールバーボタン
- これに反応し、それ自体の一部でいくつかの更新を実行するためのメインビュー。
- ルーティングを介した場合のように、Emberの意味で再レンダリングしないという主な見解。描画ライブラリを使用し、そのすべてのプロパティと動作をEmberモデルとコントローラーに統合するのはそれほど楽しいことではありません。
- ツールバーとメインビューは親ビューを共有しますが、異なる「ブランチ」にあります。
私が検討している貧弱なオプション:
ツールバーはアプリケーションレベルの問題ですが、特定のビューを指示する必要のあるボタンがいくつかあります。Ember内に表示されるオプションの1つは、「メイン」ビューの下にツールバーをネストすることです。これは、他の機能の一部では間違っているようです。
通信は、ツールバーが設定するプロパティと「リスニング」ビューが反応しての値をリセットするプロパティを保持するコントローラー(および場合によってはモデル)によって処理できます。これは、コントローラーとモデルの目的の乱用のように聞こえ、イベントリスナーのセットアップがかなり貧弱なように聞こえます。
描画ライブラリをApp.Drawingなどのグローバルなアプリケーションにすることもできますが、それも悪いようです。また、アクションは、ビュー内のデータを使用して図面ライブラリを更新することができないことも意味します。
助言がありますか?