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

ste*_*nos 4 ember.js

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

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


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

Mik*_*tti 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');
    });
  });
});
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)

请参阅控制器需求说明