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