コントローラ/ルート間でデータを共有する方法を理解しようとしています。emberでのデータ共有
私は会社に関するデータを表示しているアプリケーションを持っています。
/ summary info
/companies list of all companies with some more detail
/companies/:id details about a single company
ここで、3つのルートすべてに必要なデータは、会社データの1つの配列に含まれています。だから、アプリ起動時にそのデータをロードして、各ルートで使用する必要があります。コントローラ上で共有する必要がある追加の方法もあります。
第2及び第3のルートがネストされていることは明らかであるので、私はその会社のデータを渡すことによって、特定の会社にリンクするとき、私はCompaniesController
からのデータを共有することができます
{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}
しかし、要約ルートは私が立ち往生しているところです。私が作ってみた二つのオプション:
私は必要なすべてのメソッドを持つ
CompaniesController
を作成し、私の知る限り、次にApp.IndexController = App.CompaniesController.extend({});
それを拡張することにより
IndexController
を作成し、両方のルートはモデルを見つける必要があります:App.Router.map(function() { this.resource('companies'); }); App.CompaniesRoute = Ember.Route.extend({ model: function() { return App.Company.find(); } }); App.IndexRoute = Ember.Route.extend({ model: function() { return App.Company.find(); } });
はそうもっと良い方法があるはずのように、私は私が追加するたびに新しいルートのためにこれを繰り返す必要がありますので、(例えば
/revenue
)。companies
リソース内のsummary
ルートをネストし、 '/'のパスを指定します。私が気に入らないのは、UIの「ネスト」がデータと一致しないということです。また、私は各ルートのmodel
プロパティを再定義する必要があるようです。
別のオプションがありますか?
tl; dr:コントローラ間でデータを共有するにはどうすればよいですか?
ありがとうございました。バックボーンから来て、私はこの周りに私の頭を包んで苦労している。コントローラはデータの共有にしか使用できないようです。バックボーンでは、複数のビューにアクセスできる「企業」コレクションがあります。簡単に言えば、モデラーの共有配列を格納する目的のためだけにコントローラを作成するのが適切ですか? –
「アプリケーション設定」のようなデータがある場合は、ルート/コントローラ/ビューのコンボに含まれていないSettingsControllerを持つよりもうまくいきます。次に、needs APIを使用して、他のコントローラーが設定を使用できるようにすることができます。しかし、あなたのデータがあなたが定義したリソースツリーに関連している場合、各リソースの特定のコントローラーがより良いアプローチであり、あなたは引き続きすべてのタイプのコントローラーを共有することができます。 – intuitivepixel
ここでお尻をつけて申し訳ありませんが、私は何かを明確にしたいと思います。 @intuitivepixelこれは逆の方向に働きますか?インデックスルート 'ニーズ'会社?これはコンテナのルックアップを行う必要があるのでしょうか、ルートフックもまた起動しますか? –