Ember为所有路线的一个初始化

时间:2014-06-05 12:59:55

标签: ember.js

如果我想在路由init上做某事,我使用

MyRoute = Ember.Route.extend({
  init: function(){
    // do stuff
  }
})

如果我想为所有路由的初始化运行相同的函数,那该怎么办?有没有办法在没有单独通过每条路线的情况下全局完成?

3 个答案:

答案 0 :(得分:2)

确实有。只需使用mixin。

var InitializeMixin = Ember.Mixin.create({
    __init: function() {
        // do stuff
    }.on('init')
});

App.MyRoute = Ember.Route.extend(InitializeMixin, {

});

只需将其混合到您要进行设置的任何路线中。另请注意,我使用了on('init')而不是覆盖init功能。这是一个更清洁(我认为),因为你不必打电话给this._super()

答案 1 :(得分:1)

扩展您的基本路线:

MyRoute = Ember.Route.extend({
  init: function(){
    this._super();
    // do stuff
  }
});

OtherRoute = MyRoute.extend({
  init: function(){
    this._super();
  }
});

答案 2 :(得分:0)

两个答案都很好,但需要更改应用程序代码。在我的情况下,我想用它来切换样式表,所以每条路线都有它自己的样式表。我只需要它用于开发,在生产中我会将所有样式表编译成一个并删除切换样式表的代码。

在这种情况下,我发现将您的代码放入Ember核心(搜索var Route = EmberObject.extend

是最好的

我也意识到,要切换样式表,最好不要为路由设置单独的样式表,而是为模板设置。

当我发现时,我会在此处发布如何操作:https://stackoverflow.com/questions/24068433/ember-change-stylesheet-for-every-template