我试图了解如何在我的控制器/路由之间共享数据.
我有一个显示公司数据的应用程序.这是我想要的路线:
/ summary info
/companies list of all companies with some more detail
/companies/:id details about a single company
Run Code Online (Sandbox Code Playgroud)
现在,所有三条路线所需的数据都包含在单个公司数据数组中.所以,我想在应用启动时加载数据,然后用于每条路线.我还需要在控制器上使用其他方法进行共享.
很明显,第二条和第三条路线是嵌套的,所以我可以CompaniesController通过传递该公司的数据,从我链接到特定公司时共享数据:
{{#linkTo 'company' company}}{{ company.name }}{{/linkTo}}
Run Code Online (Sandbox Code Playgroud)
但总结路线是我陷入困境的地方.我提出的两个选项:
创建CompaniesController与我需要任何额外的方法,并创建IndexController通过扩展它
App.IndexController = App.CompaniesController.extend({});
Run Code Online (Sandbox Code Playgroud)
然后,据我所知,两条路线都需要找到模型:
App.Router.map(function() {
this.resource('companies');
});
App.CompaniesRoute = Ember.Route.extend({
model: function() {
return App.Company.find();
}
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Company.find();
}
});
Run Code Online (Sandbox Code Playgroud)
似乎应该有更好的方法,因为我必须为我添加的每个新路线重复此操作(例如/revenue).
将summary路由嵌套在companies资源中,并为其指定路径"/".我不喜欢这个是我的UI的'嵌套'与数据不匹配.我似乎还要model为每条路线重新定义房产.
还有其他选择更好吗?
tl; dr:我应该如何跨控制器共享数据?
要在控制器之间共享数据,正确的方法是使用needsAPI。
假设您CompaniesController拥有想要提供给其他控制器的所有数据,您应该通过 来定义它needs,这可以是一个简单的字符串,如果您定义了多个字符串,则可以是一个字符串数组。
App.MyController = Ember.ObjectController.extend({
needs: ['companies'],
myFunction: function() {
// now you can access your companies controller like this
this.get('controllers.companies');
}
});
Run Code Online (Sandbox Code Playgroud)
为了使事情更容易访问,您可以另外定义一个绑定,例如:
App.MyController = Ember.ObjectController.extend({
needs: ['companies'],
companiesBinding: 'controllers.companies',
myFunction: function() {
// now you can access your companies controller like this
this.get('companies');
}
});
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |