如何观察当前路线的变化?

时间:2013-01-19 18:11:29

标签: ember.js ember-router

我想在位置(路线)发生变化时更新页面的<title>标签。我对观察App.Router当前路由更改特别感兴趣 - 然后我想访问与该路由关联的视图,并根据View的属性更新观察者的<title>标记。 / p>

例如,如果转到/about

  1. 我应该将观察者设置为观察什么?我找不到currentState属性或等同于观察。
  2. 在观察者中,如何访问与路线相关联的App.AboutView
  3. 我正在使用1.0.0pre4


    我的目标是在title上的观察者可以使用的每个视图上拥有authorization属性和currentPath属性。我想使用title属性更新document.titleauthorization属性对象,以检查当前用户是否可以访问该路由。

    现在我说这个和@Michael Grassotti的答案,也许这些属性属于控制器而不是View。目标是获得与当前Route的上下文关联的这些属性的访问权限,以修改document.title并检查我的App.CurrentUserController (存储User对象模型是否为{{1}}登录用户)被授权访问当前路由。

2 个答案:

答案 0 :(得分:16)

  
      
  1. 我应该将观察者设置为观察什么?我无法找到currentState属性或等效于观察。
  2.   

您可以观察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')
});
  
      
  1. 在Observer中,如何访问与路径关联的App.AboutView?
  2.   

尝试从这个观察者访问App.AboutView会很棘手,可能不是一个好主意。我不清楚为什么视图的属性在这种情况下会有用。你能详细说明吗?

答案 1 :(得分:7)

因此,我正在尝试使用的属性属于路径的控制器,而不是视图。

给定一些contactUs路由,它的Controller可能看起来像

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的{​​{1}}实施中找到了