2014-06-12 8 views
2

ember路由中存在多个beforeModel挂钩有什么问题吗?Ember.js - 多个beforeModel挂钩

例如,如果我有一个mixin,它将添加一个beforeModel挂钩,然后在路由中的另一个beforeModel“混入”。

回答

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(参数1,参数2 ......)来调用基方法。

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

4

kingpin2k是正确的,在他的榜样的IndexRoute的beforeModel钩获胜。请注意,您可以调用App.Foo中继承的(但是被覆盖的)行为与this._super();

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