Ответ 1
Хорошо ли установить глобальную переменную currentUser в объекте App?
Нет, это не очень хорошая практика. Вам следует избегать использования глобальных переменных. Структура делает многое, чтобы сделать это возможным - если вы считаете, что глобальная переменная является лучшим решением, это признак того, что что-то нужно реорганизовать. В большинстве случаев правильное место находится в контроллере. Например, currentUser может быть:
//a property of application controller
App.ApplicationController = Ember.Controller.extend({
currentUser: null
});
//or it 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
, чтобы сделать его доступным через локальный контроллер. И если вам это нужно с маршрута, используйте метод route controllerFor.