我试图了解如何在我的控制器/路由之间共享数据。
我有一个显示公司数据的应用程序。以下是我想要的路线:
/ summary info
/companies list of all companies with some more detail
/companies/:id details about a single company现在,所有三条路由所需的数据都包含在一个公司数据数组中。因此,我希望在应用程序启动时加载这些数据,然后将其用于每条路径。对于应该共享的控制器,还需要一些额外的方法。
很明显,第二和第三条路由是嵌套的,所以当我链接到特定的公司时,我可以通过传递该公司的数据来共享来自CompaniesController的数据:
{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}但简单的路线是我被困在哪里。我想出了两个选择:
CompaniesController,并通过扩展来创建IndexController
App.IndexController = App.CompaniesController.extend({});
然后,据我所知,这两条路线都需要找到模型:
App.Router.map(函数(){ this.resource('companies');});App.CompaniesRoute = Ember.Route.extend({ model: function() {model App.Company.find();} });App.IndexRoute = Ember.Route.extend({ model: function() {model App.Company.find();});
似乎应该有更好的方法,因为我必须对我添加的每一条新路径(例如/revenue)重复这一点。summary资源中嵌套companies路由,并给它一个'/‘路径。我不喜欢的是,我的UI的“嵌套”与数据不匹配。我似乎还必须重新定义每个路由的model属性。还有更好的选择吗?
博士:我应该如何在控制器之间共享数据?
发布于 2013-07-19 14:36:36
要共享数据beetwen控制器,正确的方法是使用 API。
假设您的CompaniesController拥有您想要提供给其他控制器的所有数据,您应该通过needs来定义它,如果您定义了多个字符串,这可以是一个简单的字符串,也可以是一个字符串数组。
App.MyController = Ember.ObjectController.extend({
needs: ['companies'],
myFunction: function() {
// now you can access your companies controller like this
this.get('controllers.companies');
}
});为了使事情更容易访问,您可以另外定义一个绑定,例如:
App.MyController = Ember.ObjectController.extend({
needs: ['companies'],
companiesBinding: 'controllers.companies',
myFunction: function() {
// now you can access your companies controller like this
this.get('companies');
}
});希望能帮上忙。
https://stackoverflow.com/questions/17747876
复制相似问题