2

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

有什么建议么 ?

4

1 回答 1

2

来自“了解 Ember.js 路由器:入门”指南:

每个 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');
            }

        })
    })
});

在浏览器控制台打开的情况下检查这个小提琴,这样你就可以在输入/离开路线时看到日志。

编辑:如果您只想根据路线更新当前选定的菜单,则不需要在连接插座之后或之前连接事件,您实际上需要您的“菜单控制器”具有跟踪的属性选定的项目,当您输入给定的路线时,您会更新该控制器。您的“菜单视图”将具有子菜单项,其中包含classNameBindings基于控制器中选择的提要(您可以绑定到父视图)。这个小提琴已经实现了,所以我不会再写一个了,但是检查一下,看看NavigationController, NavigationView(and NavigationItemView) & 路线。在每个connectOutlet我更新控制器中的选定菜单项,如下所示:

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

希望这可以帮助

于 2012-11-17T05:53:37.620 回答