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。 

posted @ 2016-01-28 13:35  鱼不吐泡泡  阅读(238)  评论(0编辑  收藏  举报