我想在位置(路线)发生变化时更新页面的<title>
标签。我对观察App.Router
当前路由更改特别感兴趣 - 然后我想访问与该路由关联的视图,并根据View的属性更新观察者的<title>
标记。 / p>
例如,如果转到/about
currentState
属性或等同于观察。App.AboutView
?我正在使用1.0.0pre4
我的目标是在title
上的观察者可以使用的每个视图上拥有authorization
属性和currentPath
属性。我想使用title
属性更新document.title
和authorization
属性对象,以检查当前用户是否可以访问该路由。
现在我说这个和@Michael Grassotti的答案,也许这些属性属于控制器而不是View。目标是获得与当前Route的上下文关联的这些属性的访问权限,以修改document.title
并检查我的App.CurrentUserController
(存储User
对象模型是否为{{1}}登录用户)被授权访问当前路由。
答案 0 :(得分:16)
- 我应该将观察者设置为观察什么?我无法找到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
会很棘手,可能不是一个好主意。我不清楚为什么视图的属性在这种情况下会有用。你能详细说明吗?
答案 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}}实施中找到了