我想创建一个页面,在左侧我有固定视图(一些过滤器),这些视图应用于右侧的结果。
例如,左侧是按类型、标题、创作年份过滤电影的过滤器……右侧是不同的图表和表格,它们会根据所选的过滤器进行更新。
所以我想在左边有一个固定的视图,然后在右边有一个出口,它会根据路线而改变。
这是正确的方法吗?如果是,我不知道如何将过滤器更改传达给右侧的控制器。
这个 JSFiddle 显示了类似的设置:http: //jsfiddle.net/DEHcK/2/
在 ContentRoute -> setupController 中,我得到了 NavigationController 的一个实例,但是我不知道如何更改 someValue。
在上面的例子中,ContentController 是如何获取 NavigationController 中 someValue 的变化的呢?
这是实现我在 ember 中描述的应用程序的正确方法吗?
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>