23

我需要使用一个全局变量(用户上下文,可从所有代码中获得)我已经阅读了一些关于这个主题的帖子,但我没有明确的答案。

App = Ember.Application.create({
  LOG_TRANSITIONS: true,
  currentUser: null
});
  1. 在 App 对象中设置 currentUser 全局变量是一个好习惯吗?
  2. 如何从应用程序中使用的所有控制器更新和访问 currentUser 属性?
4

1 回答 1

58

在 App 对象中设置 currentUser 全局变量是一个好习惯吗?

不,这不是一个好习惯。您应该避免使用全局变量。该框架为使这成为可能做了很多工作——如果您发现自己认为全局变量是最佳解决方案,则表明应该重构某些东西。在大多数情况下,正确的位置是在控制器中。例如,currentUser 可以是:

//a property of application controller
App.ApplicationController = Ember.Controller.extend({
  currentUser: null
});

//or it's own controller
App.CurrentUserController = Ember.ObjectController.extend({});

如何从应用程序中使用的所有控制器更新和访问 currentUser 属性?

使用该needs物业。假设您已将 currentUser 声明为 ApplicationController 的属性。可以像这样从 PostsController 访问它:

App.PostsController = Ember.ArrayController.extend{(
  needs: ['application'],
  currentUser: Ember.computed.alias('controllers.application.currentUser'),
  addPost: function() {
    console.log('Adding a post for ', this.get('currentUser.name'));
  }
)}

如果您需要从视图/模板访问 currentUser,只需使用needs使其可通过本地控制器访问。如果您需要从路由中获取它,请使用路由的 controllerFor 方法。

于 2013-06-02T02:50:08.870 回答