Подтвердить что ты не робот

Доступ к глобальной переменной из любого контроллера приложения

Мне нужно использовать глобальную переменную (пользовательский контекст, доступный из всего кода) Я прочитал несколько сообщений по этой теме, но у меня нет четкого ответа.

App = Ember.Application.create({
  LOG_TRANSITIONS: true,
  currentUser: null
});
  • Можно ли установить глобальную переменную currentUser в объекте App?
  • Как обновить и получить доступ к свойству currentUser со всех контроллеров, используемых в приложении?
4b9b3361

Ответ 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.