Ember.js - 多个beforeModel Hooks

时间:2014-06-12 03:36:17

标签: ember.js

beforeModel路线中有多个ember挂钩有什么问题吗?

例如,如果我有一个mixin添加beforeModel个钩子,然后在路线中添加另一个beforeModel,那么"混合到&#34 ;

2 个答案:

答案 0 :(得分:4)

不,如果你在路线和mixin上定义了它,那么路线就会胜出。在下面的示例中,只会调用bar

App.Foo = Ember.Mixin.create({
  beforeModel: function(transition, queryParams){
    console.log('foo');
  }
})

App.IndexRoute = Ember.Route.extend(App.Foo,{
  beforeModel: function(transition, queryParams){
    console.log('bar');
  },
  model: function() {
    return ['red', 'yellow', 'blue'];
  }
});

http://emberjs.jsbin.com/runufowe/1/edit

如果你愿意,你可以从扩展类中调用this._super(param1,param2 ...)来调用基本方法。

App.IndexRoute = Ember.Route.extend(App.Foo,{
  beforeModel: function(transition, queryParams){
    this._super(transition, queryParams);
    console.log('bar');
  },
  model: function() {
    return ['red', 'yellow', 'blue'];
  }
});

http://emberjs.jsbin.com/runufowe/4/edit

答案 1 :(得分:4)

kingpin2k是正确的,在他的例子中,IndexRoute的beforeModel钩子获胜。值得一提的是,您可以使用this._super();从App.Foo调用继承(但覆盖)的行为。

App.Foo = Ember.Mixin.create({
  beforeModel: function(transition, queryParams){
    console.log('foo');
  }
});

App.IndexRoute = Ember.Route.extend(App.Foo,{
  beforeModel: function(transition, queryParams){
    this._super();
    console.log('bar');
  },
  model: function() {
    return ['red', 'yellow', 'blue'];
  }
});

http://jsbin.com/bibonila/2/edit