Как можно отслеживать текущий маршрут для изменений?

Я хочу обновить тег <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 было бы полезно в этом сценарии. Вы можете уточнить?