我想在Ember Router中的每个connectOutlets调用之前和之后调用一些函数。我无法在Ember文档中找到任何内容。
有什么建议吗?
答案 0 :(得分:2)
来自“Understanding the Ember.js Router: A Primer”指南:
每个Ember.Route都会触发一个进入和退出回调。这是一个合适的 插入日志和调试数据的地方已经出现了 这个应用程序。
在路由器中也将enableLogging属性设置为true 帮助显示路由器的决策过程。当。。。的时候 浏览器的调试控制台打开,路由器将打印有用的错误 以STATEMANAGER开头的消息。
您可以使用enter
和exit
回调,如下所示:
App.Router = Ember.Router.extend({
enableLogging: true,
root: Ember.Route.extend({
gotoHome: Em.Route.transitionTo('root.home'),
gotoInfo: Em.Route.transitionTo('root.info'),
index: Ember.Route.extend({
route: '/',
redirectsTo: 'home'
}),
home: Ember.Route.extend({
route: '/home',
connectOutlets: function(router) {
router.get('applicationController')
.connectOutlet("home");
},
enter: function(router){
console.log('The "enter" event of "home" route has been fired');
},
exit: function(router) {
console.log('The "exit" event of "home" route has been fired');
}
}),
info: Ember.Route.extend({
route: '/info',
connectOutlets: function(router) {
router.get('applicationController')
.connectOutlet("info");
},
enter: function(router){
console.log('The "enter" event of "info" route has been fired');
},
exit: function(router) {
console.log('The "exit" event of "info" route has been fired');
}
})
})
});
在浏览器控制台打开的情况下检查this fiddle,这样您就可以在进入/离开路线时看到日志。
修改强>:
如果您只想根据路线更新当前选定的菜单,则无需在连接插座之后或之前连接事件,实际上您需要“菜单控制器”才能拥有跟踪所选内容的属性项目,当您输入给定路线时,您更新该控制器。您的“菜单视图”将包含classNameBindings
的子菜单项,该项是基于控制器中所选的(您可以绑定到父视图)的Feed。 This fiddle已经实施了它,所以我不会写另一个,但请查看并查看NavigationController
,NavigationView
(和NavigationItemView
)&路线。在每个connectOutlet
中,我正在更新控制器中的所选菜单项,如下所示:
router.set('navigationController.selected', 'MY ROUTE NAME GOES HERE');
希望这有帮助