将全球国家放在Ember.js的哪里?

时间:2013-02-08 12:33:46

标签: ember.js

在我的Ember.js应用程序中,用户可以拥有多个项目。由于一次只能查看一个项目,因此通过导航栏选择活动项目。这基本上是一个全局状态(也反映在URL /projects/xyz)。

由于多个组件取决于项目选择,我在哪里提供此信息?我以什么形式保存它(实例或id)?


关于我的现状:我有一条路由拦截setupController/projects/:project_id的调用,并使用App.set("projectId", model)将实例放入全局命名空间。这看起来很糟糕,不是吗?

1 个答案:

答案 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}}

请参阅controllers-needs-explained