2014-06-12 64 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