6

我正在尝试观察路由更改以在渲染后应用一些常见操作。这个想法是有一个类似于的功能,onload但是当我们使用单页应用程序时,这需要在每次路由更改时触发。(可以限定为新视图)

我发现了如何观察 currentPath 的变化:

App.ApplicationController = Ember.Controller.extend({
  currentPathDidChange: function() {
    prettyPrint()
  }.observes('currentPath');
});

虽然这在某些情况下效果很好,但它会在路由更改时触发,但仍然要尽早应用内容更改,因为它似乎在内容渲染之前附加。

关于实现这一目标的最佳实践的任何想法?

4

2 回答 2

12

您是否尝试过延迟代码Ember.run.schedule?例如,

App.ApplicationController = Ember.Controller.extend({
  currentPathDidChange: function() {
    Ember.run.schedule('afterRender', this, function() {
      prettyPrint();
    });
  }.observes('currentPath')
});
于 2013-04-15T19:35:51.577 回答
1

由于Ember 1.x 中不推荐使用控制器,因此在路由器中查找 url 将是未来证明您的应用程序的好方法。你可以这样ember-cli做:

// similar to onLoad event behavior
export default Ember.Route.extend({
  afterModel: function (model){
    Ember.run.next(() => {
      console.log(this.get('router.url'));
    });
  }
});

// hacky way to get current url on each transition
export default Ember.Route.extend({
  actions: {
    didTransition: function() {
      Ember.run.next(() => {
        console.log(this.get('router.url'));
      });
    }
  }
});

这将记录:/posts/posts/3/comments

于 2015-04-18T02:30:56.437 回答