Ember:路由器前后挂钩connectOutlets

时间:2012-11-17 02:04:46

标签: ember.js hook ember-old-router

我想在Ember Router中的每个connectOutlets调用之前和之后调用一些函数。我无法在Ember文档中找到任何内容。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

来自“Understanding the Ember.js Router: A Primer”指南:

  

每个Ember.Route都会触发一个进入和退出回调。这是一个合适的   插入日志和调试数据的地方已经出现了   这个应用程序。

     

在路由器中也将enableLogging属性设置为true   帮助显示路由器的决策过程。当。。。的时候   浏览器的调试控制台打开,路由器将打印有用的错误   以STATEMANAGER开头的消息。

您可以使用enterexit回调,如下所示:

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已经实施了它,所以我不会写另一个,但请查看并查看NavigationControllerNavigationView(和NavigationItemView)&路线。在每个connectOutlet中,我正在更新控制器中的所选菜单项,如下所示:

router.set('navigationController.selected', 'MY ROUTE NAME GOES HERE');

希望这有帮助