如何从Ember.js中的另一个控制器获得控制器的模型

时间:2013-02-12 17:35:45

标签: ember.js

在控制器中,我目前正在这样做:

controller.transitionTo( 'listing', App.Listings.find(1) );

这很好用。我想知道的是,是否有办法从控制器内访问另一个控制器的模型,这样我就不需要引用'App。',因为这似乎不是Ember推荐的最佳实践。我知道有一个modelFor()但它似乎只在路由中工作。

1 个答案:

答案 0 :(得分:2)

模型设置为控制器的内容,因此在您的控制器中,模型是内容。 (除非你在路线中覆盖你的controllerFor()方法)。

然后在您的控制器中,您应该定义一个needs数组,它列出了您希望此控制器可以访问的控制器实例(而不是类)的名称。

因此,对于一个可以访问PostController的CommentsController,您可以在CommentsController定义中以这种方式定义它:

needs: ['post']

然后通过controllers.post(你不需要使用模型)在这个控制器中可用如果你的控制器是ObjectController或ArrayController的一个实例,那么你甚至不需要担心转到内容,控制器将代理您的内容/模型。

请注意,发布关系的评论由路由器决定(具体说明您的资源和路由的定义方式)。

此外,阅读需求的良好起点(源代码之外):http://darthdeus.github.com/blog/2013/01/27/controllers-needs-explained/