4.5 Routing -- Setting Up A Controller
1. 改变URL可能也会改变屏幕显示哪个模板。然而,如果它们有信息去显示,模板才是有用的。
2. 在Ember.js中,一个模板从一个controller检索信息去显示。
3. 为了告诉controller去展示哪个模板,在路由处理器的setupController hook中设置它的model属性。
app/router.js
Router.map(function() { this.route('post', { path: '/posts/:post_id' }); });
app/routes/post.js
export default Ember.Route.extend({ // The code below is the default behavior, so if this is all you // need, you do not need to provide a setupController implementation // at all. setupController: function(controller, model) { controller.set('model', model); } });
4. setupController hook接收路由处理器相关的controller作为它的第一个参数。在这种情况下,post路由的setupController接受应用程序的controller:posts实例。
5. 指定一个默认之外的controller,设置路由的controllerName属性:
app/routes/special-post.js
export default Ember.Route.extend({ controllerName: 'post' });
作为第二个参数,它接受路由的处理器model。
6. 默认的setupController hook设置相关controller的model属性为路由处理器的model。
7. 如果你想要配置一个路由处理器相关的controller之外的controller,使用controllerFor方法:
export default Ember.Route.extend({ setupController: function(controller, model) { this.controllerFor('topPost').set('model', model); } });