你應該嘗試和擴展Ember.Route
並添加window.scrollTo
在enter
回調。然後,您不必使用Ember的Route
作爲您的葉子路線,而是調用您的路線。 extend()
,所以他們會自動向上滾動,當你輸入路由/狀態。東西類似這樣:
// define your custom route and extend "enter"
var MyRoute = Em.Route.extend({
enter: function(router) {
// for now on, all the routes that extend this,
// will fire the code in this block every time
// the application enters this state
// do whatever you need to do here: scroll and whatnot
}
});
App.Router = Em.Router.extend({
enableLogging: true,
location: 'hash',
index: Em.Route.extend({
route: '/',
connectOutlets: function(router) {
...
},
// on your leaf routes, use your own custom route that
// does your scroll thing or whatever you need to do
home: MyRoute.extend({
route: '/',
connectOutlets: function (router, context) {
...
}
}),
// other routes...
})
});
是否有意義?
你的方法完美地回答了這個問題。是的,它似乎是關於離開路線,而不是關於應用程序控制器。 – xMartin
如果this.childStates.length爲0,您也可以重新打開Ember.Route並檢查每個「輸入」事件,因此您知道這是一個離開路線。如果您需要在特定路線中使用「輸入」事件,兩種方法都會將責任推給this._super。 – xMartin
請記住,重新開啓'Ember.Route'就是你會爲所有**路線提高輸入功能。您可能想保留框架中的原始功能並在自己的lib中進行擴展。 – MilkyWayJoe