Pace 和 ember,如何在不重复代码的情况下让它在所有路线上工作

Pace and ember, how do I make it work in all routes without repeating code

我正在使用 ember 配速加载功能。

步速:http://github.hubspot.com/pace/docs/welcome/

在我的代码中,我在每条路线中重复此操作,以便显示加载栏:

App.IndexRoute = Ember.Route.extend({
  activate: function() {
    this._super();
    return Pace.restart();
  },
  deactivate: function() {
    this._super();
    return Pace.stop();
  }
});

App.AboutRoute = Ember.Route.extend({
    activate: function() {
    this._super();
    return Pace.restart();
  },
  deactivate: function() {
    this._super();
    return Pace.stop();
  }
});

有什么办法可以不在每条路由中重复代码?谢谢!

您可以通过执行以下操作覆盖所有路线:

Ember.Route.reopen({
  activatePace: function() {
    return Pace.restart();
  }.on('activate'),
  deactivatePace: function() {
    return Pace.stop();
  }.on('deactivate')
});

此外,这不会干扰现有的 activate/deactivate 挂钩,因此您不必调用 this._super()

查看有关重新开放的文档here

我建议创建 Mixin 或使用 Ember 的加载路径。

因此在您的情况下,Mixin 将按如下方式工作:

App.PaceLoader = Ember.Route.extend({
  activate: function() {
    this._super();
    return Pace.restart();
  },
  deactivate: function() {
    this._super();
    return Pace.stop();
  }
});

然后将它包含在您希望它工作的每条路线中:

App.AboutRoute = Ember.Route.extend(App.PaceLoader, {
  //the rest of your route code here...
});

我以前没有用过 Pace,但您可以将它添加到 Ember 不太明显的加载路径(我不相信他们已经记录了它...),在每个转换中使用:

App.LoadingRoute = Ember.Route.extend({
  activate: function() {
    this._super();
    return Pace.restart();
  },
  deactivate: function() {
    this._super();
    return Pace.stop();
  }
});

如果可行,您就不必将其包含在任何其他路由中。 :)