左側に固定ビュー(いくつかのフィルター)があり、右側の結果に適用されるページを作成したいと思います。
たとえば、左側には、ジャンル、タイトル、作成年で映画をフィルタリングするためのフィルターがあります。右側には、選択したフィルターに基づいて更新されるさまざまなチャートと表があります。
そこで、左側に固定ビュー、右側にルートに応じて変化する出口を考えていました。
これは正しい方法ですか?もしそうなら、フィルターの変更を右側のコントローラーに伝える方法がわかりません。
このJSFiddleは、同様の設定を示しています:http: //jsfiddle.net/DEHcK/2/
ContentRoute-> setupControllerで、NavigationControllerのインスタンスを取得しますが、someValueへの変更を取得する方法がわかりません。
上記の例では、ContentControllerはNavigationControllerのsomeValueへの変更をどのように取得できますか?
これは、残り火で説明したアプリを実装する正しい方法ですか?
JavaScript:
window.App = Ember.Application.create();
App.Router.map(function () {
this.route('content');
});
App.ContentRoute = Ember.Route.extend({
setupController: function (controller) {
controller.set('navigationController', this.controllerFor('navigation'));
}
});
App.ContentController = Ember.ObjectController.extend({
navigationController: null,
observerOfSomeValue: function () {
this.set('observedValue', this.get('navigationController.someValue'));
}.observes('navigationController', 'navigationController.someValue'),
observedValue: null
});
App.IndexRoute = Ember.Route.extend({
redirect: function () {
this.transitionTo('content');
}
});
App.NavigationView = Ember.View.extend({
init: function () {
this._super();
this.set('controller', this.get('parentView.controller').controllerFor('Navigation'));
},
templateName: "navigation"
});
App.NavigationController = Ember.ObjectController.extend({
someValue: 'xx',
observedValue: null,
observerOfSomeValue: function () {
this.set('observedValue', this.someValue);
}.observes('someValue')
});
HTML:
<script type="text/x-handlebars" data-template-name="application" >
<div>
{{view App.NavigationView}}
</div>
<div>
{{ outlet }}
</div>
</script>
<script type="text/x-handlebars" data-template-name="navigation" >
Change {{view Ember.TextField valueBinding="controller.someValue"}}
<div>observed value in same view: {{controller.observedValue}}</div>
</script>
<script type="text/x-handlebars" data-template-name="content" >
<div style="margin-top: 2em">
observed value in another view: {{observedValue}}
</div>
</script>