反向路由更改以应用等效于onload

时间:2013-04-15 19:17:05

标签: ember.js routes observers

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

我找到了如何观察currentPath的变化:

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

虽然这在某些情况下效果很好,但是当路由发生变化时会触发,但仍然要提前应用内容更改,因为它似乎会在内容呈现之前附加。

有关实现此目标的最佳做法的想法吗?

2 个答案:

答案 0 :(得分:12)

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

App.ApplicationController = Ember.Controller.extend({
  currentPathDidChange: function() {
    Ember.run.schedule('afterRender', this, function() {
      prettyPrint();
    });
  }.observes('currentPath')
});

答案 1 :(得分:1)

由于deprecation of Controllers in Ember 1.x发现路由器中的网址是未来证明您的应用的好方法。你可以在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等。