6.3 Controllers -- Managing Dependencies Between Controllers
1. 有时候,特别是当嵌套资源的时候,我们需要两个controllers之间的某种连接。让我们拿这个router当做例子:
app/router.js
var Router = Ember.Router.extend({}); Router.map(function() { this.route("post", { path: "/posts/:post_id" }, function() { this.route("comments", { path: "/comments" }); }); }); export default Router;
- 如果我们访问/posts/1/comments URL,我们的post model将会被加载进一个PostController的model,意思就是它不能直接的在CommentsController中被访问。我们也许想在comments模板中展示一些关于它的信息。
- 我们可以这样做,我们把
PostController注入
到CommentsController
中
app/controllers/comments.js
export default Ember.Controller.extend({ postController: Ember.inject.controller('post') });
一旦comments访问PostController,一个只读别名可以被用来从哪个controller中读取model。为了获取Post model,我们参考postController.model:
app/controllers/comments.js
export default Ember.Controller.extend({ postController: Ember.inject.controller('post'), post: Ember.computed.reads('postController.model') });
app/templates/comments.hbs
<h1>Comments for {{post.title}}</h1> <ul> {{#each model as |comment|}} <li>{{comment.text}}</li> {{/each}} </ul>
2. 在Ember.js中想要获取更多的关于依赖注入的信息,请看dependency injection guide。
3. 想要获得更多关于别名的信息,请看的aliased properties.API。