Это хорошая практика, чтобы установить глобальную переменную CurrentUser в объекте App?
Нет, это не очень хорошая практика. Вам следует избегать использования глобальных переменных. Структура делает многое, чтобы сделать это возможным - если вы считаете, что глобальная переменная является лучшим решением, это признак того, что что-то нужно реорганизовать. В большинстве случаев правильное место находится в контроллере. Например, 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
, чтобы сделать его доступным через локальный контроллер. И если вам это нужно с маршрута, используйте метод маршрута routeFor.
У меня есть несколько булевых свойств уровня приложения, и эти свойства будут использоваться почти во всех представлениях/шаблонах. Если я определяю их в 'applicationController', тогда я должен определить свойство' needs' во всем контроллере. Если я определяю их в приложении, тогда не нужно «потребностей». Любая мысль об этом? – Manoharan
Я вижу аргумент для установки нескольких логических свойств на уровне приложения, например, сам ember определяет LOG_TRANSITIONS. Все более сложное должно быть в его собственном контроллере. Если вы находитесь в ситуации, когда вы хотите, чтобы один контроллер был доступен всем остальным, вы можете использовать инициализатор для ввода его в другие. См. Http://mcdowall.info/posts/ember-application-initializers/ для примера, который делает 'CurrentUserController' доступным как свойство currentUser для всех контроллеров. Не могли бы сделать то же самое с ConfigController. –
Ember.Computed должен быть Ember.computed – Nath