【问题标题】:How Can The Current Route Be Observed for Changes?如何观察当前路线的变化?
【发布时间】:2013-01-19 18:11:29
【问题描述】:

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

例如,如果去/about

  1. 如何设置观察者观察?我无法找到 currentState 属性或等效的观察对象。
  2. 在观察者中,如何访问与路由关联的App.AboutView

我正在使用1.0.0pre4


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

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

【问题讨论】:

    标签: ember.js ember-router


    【解决方案1】:
    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 会很棘手,而且可能不是一个好主意。我不清楚为什么视图的属性在这种情况下会有用。能详细点吗?

    【讨论】:

    • 感谢您的回复;我更新了我的问题以提供更多背景信息。
    • 我已经解决了另一半的问题。感谢currentPath 的推动。
    • 没问题。完全同意:你上面的结论,这些属性属于控制器。
    • 你能在视图上做这样的事情吗?
    • 当然。从 applicationView 它将是 observes('controller.currentPath')
    【解决方案2】:

    所以我尝试使用的属性属于路由的 Controller,而不是 View。

    给定一些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 (似乎也没有记录,但在 reopenreopen 实现中找到了 Ember.ControllerMixin

    【讨论】:

    猜你喜欢
    • 2013-01-23
    • 2021-03-16
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多