Durandal模态和导航(即后退按钮)

时间:2014-01-24 22:52:37

标签: durandal

这个问题在durandal示例应用程序中很容易看到:

1)导航到“模态对话框”演示 2)单击按钮以显示模态 3)单击浏览器后退按钮

执行此操作时,页面会在保持对话框打开的同时导航到上一个屏幕,这几乎不是您想要的。

这里是否有关闭对话框或阻止导航的最佳做法?

2 个答案:

答案 0 :(得分:1)

您可以绑定到canDeactivate回调。检查模态是否打开并阻止它或者是否要离开,关闭它

答案 1 :(得分:1)

虽然我不希望这个答案立即适用于那里的许多人,但我想把它扔到那里,以防它帮助某人。

我们使用typescript来创建我们的视图模型,并且我们有一个基本视图模型来封装常见功能(以及公开dataservice,pub / sub等)。在这个视图模型中,这种方法似乎运行良好:

public ShowDialog(viewModel: any) {
    // create a subscription to the router so that we can forcibly close the dialog in the event of a routing call
    var subscription = router.on('router:route:activating');
    subscription.then(() => {
        // we will hit this block if the router is activating while this dialog is open
        var moduleId = viewModel.__moduleId__ || '[No Id]';
        system.log('Navigation detected while dialog is open - the dialog will now be forcibly closed. (' + moduleId + ')', viewModel);
        dialog.close(viewModel);
    });

    var promise = App.showDialog(viewModel);
    promise.then(() => {
        subscription.off(); // kill the router subscription since the dialog is closed at this point
    });

    return promise;
}

消费者可以使用此功能直接替代durandals的对话框,以选择加入自动关闭功能。