4

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

由于多个组件取决于项目选择,我将这些信息放在哪里?我以什么形式保存它(实例或ID)?


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

4

1 回答 1

8

每当您有反映在 url 中的全局状态时,您都可以使用 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}}

请参阅控制器需求说明

于 2013-02-08T18:44:59.267 回答