6.3 Controllers -- Managing Dependencies Between Controllers

时间:2024-01-03 15:28:38

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。