在我的Ember.js应用程序中,用户可以拥有多个项目.由于一次只能查看一个项目,因此通过导航栏选择活动项目.这基本上是一个全局状态(也反映在URL中/projects/xyz).
由于多个组件取决于项目选择,我在哪里提供此信息?我以什么形式保存它(实例或id)?
关于我的现状:我有一条路由拦截对setupControllerfor 的调用,/projects/:project_id并用于App.set("projectId", model)将实例放在全局命名空间中.这看起来很糟糕,不是吗?
每当您拥有反映在URL中的全局状态时,您可以使用ember路由器来管理该状态.
例如,假设您有一个嵌套在项目下的任务资源,例如:
App.Router.map(function() {
this.resource('project', { path: '/projects/:project_id' }, function() {
this.route('edit');
this.resource('tasks', function() {
this.route('new');
});
});
});
Run Code Online (Sandbox Code Playgroud)
Ember将使用project_id url段来查找模型并将其设置为ProjectController的内容.要从另一个控制器访问当前选定的项目,请使用该needs阵列声明依赖项并通过该controllers属性访问它.
App.TasksController = Ember.ArrayController.extend({
needs: ['project']
});
// tasks/index.hbs
Project name: {{controllers.project.name}}
Run Code Online (Sandbox Code Playgroud)
请参阅控制器需求说明
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |