我需要使用一个全局变量(用户上下文,可从所有代码中获得)我已经阅读了一些关于这个主题的帖子,但我没有明确的答案。
App = Ember.Application.create({
LOG_TRANSITIONS: true,
currentUser: null
});
- 在 App 对象中设置 currentUser 全局变量是一个好习惯吗?
- 如何从应用程序中使用的所有控制器更新和访问 currentUser 属性?
我需要使用一个全局变量(用户上下文,可从所有代码中获得)我已经阅读了一些关于这个主题的帖子,但我没有明确的答案。
App = Ember.Application.create({
LOG_TRANSITIONS: true,
currentUser: null
});
在 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 方法。