Как можно отслеживать текущий маршрут для изменений?
Я хочу обновить тег <title>
для страницы всякий раз, когда изменяется местоположение (маршрут). Мне особенно интересно наблюдать изменение текущего маршрута App.Router
. Затем я хочу получить доступ к представлению, связанному с этим маршрутом, и обновить тег <title>
от наблюдателя на основе свойства представления.
Например, если перейти к /about
- Что я должен установить наблюдателю? У меня возникли проблемы с поиском свойства
currentState
или эквивалента для наблюдения.
- Внутри Observer, как я могу получить доступ к
App.AboutView
, связанному с маршрутом?
Я использую 1.0.0pre4
Моя цель состоит в том, чтобы иметь свойство title
и свойство authorization
на каждом представлении, с которым работает Observer на currentPath
. Я хочу использовать свойство title
для обновления объекта document.title
и authorization
для проверки того, что мой текущий пользователь может получить доступ к маршруту.
Теперь, когда я говорю это и с ответом @Michael Grassotti, возможно, эти свойства принадлежат Контроллеру, а не View. Цель состоит в том, чтобы получить доступ к этим свойствам, связанным с текущим контекстом маршрута, для изменения document.title
и проверить, разрешен ли мой App.CurrentUserController
(который хранит объектную модель User
для зарегистрированного пользователя), чтобы разрешить текущий маршрут.
Ответы
Ответ 1
Таким образом, свойства, с которыми я пытаюсь работать, относятся к Контроллер для маршрута, а не к виду.
Учитывая некоторый маршрут contactUs
, он может выглядеть как
App.ContactUsController = App.AppController.extend({
title: "Contact Us"
});
Мой App.ApplicationController
теперь может выглядеть как
App.ApplicationController = Ember.Controller.extend({
updateTitle: function() {
window.document.title = this.controllerFor(this.currentPath).get('title');
}.observes('currentPath')
});
Итак, методы API/свойства, которые я искал, это
-
App.ApplicationController.get('currentPath')
(в настоящее время на сайте не зарегистрировано)
-
controllerFor
(также кажется недокументированным, но находится в реализации reopen
для Ember.ControllerMixin
)
Ответ 2
- Что я должен установить наблюдателю? У меня возникли проблемы с поиском свойства currentState или эквивалента для наблюдения.
Вы можете наблюдать за ApplicationController.currentPath
. Например:
App.ApplicationController = Ember.Controller.extend({
currentPathDidChange: function() {
path = this.get('currentPath');
console.log('path changed to: ', path);
window.document.title = path;
}.observes('currentPath')
});
- Внутри Observer, как я могу получить доступ к App.AboutView, связанному с маршрутом?
Попытка получить доступ к App.AboutView
от этого наблюдателя будет сложной и, вероятно, не очень хорошей идеей. Я не понимаю, почему свойство view было бы полезно в этом сценарии. Вы можете уточнить?