这个问题在durandal示例应用程序中很容易看到:
1)导航到“模态对话框”演示 2)单击按钮以显示模态 3)单击浏览器后退按钮
执行此操作时,页面会在保持对话框打开的同时导航到上一个屏幕,这几乎不是您想要的。
这里是否有关闭对话框或阻止导航的最佳做法?
答案 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的对话框,以选择加入自动关闭功能。