15

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

例如,如果去/about

  1. 我设置观察者观察什么?我很难找到currentState要观察的属性或等价物。
  2. 在观察者中,我如何访问App.AboutView与路由关联的?

我正在使用1.0.0pre4


我的目标是在观察者将使用的每个视图上都有一个title属性和一个属性。我想使用该属性来更新,并且该属性对象来检查我当前的用户是否可以访问该路由。authorizationcurrentPathtitledocument.titleauthorization

既然我这么说并且@Michael Grassotti 的回答,也许这些属性属于控制器而不是视图。目标是访问与当前路由的上下文关联的这些属性,以修改document.title并检查我的App.CurrentUserController (存储User登录用户的对象模型)是否被授权访问当前路由。

4

2 回答 2

16
  1. 我设置观察者观察什么?我无法找到要观察的 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')
});
  1. 在 Observer 中,如何访问与路由关联的 App.AboutView?

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

于 2013-01-19T21:25:21.153 回答
7

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

给定一些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
于 2013-01-19T22:17:57.957 回答