1

我有一个 Durandal 应用程序,允许用户更新各种个人资料信息。对于某些数据位,用户必须单击“保存”以表明他们想要保存他们的更改。

如果用户试图通过未保存的更改导航离开当前视图,我们希望拦截导航并弹出一个模式说“您有未保存的更改 - 您想在离开此视图之前保存它们吗?”

但是,在查看Durandal Router 插件文档时,我无法确定如何在我的视图模型中拦截导航请求。我想我想听一下 router:route:activating 事件。但:

  1. 我不确定在哪里以及如何为此设置侦听器。
  2. 我不知道如何在我的事件处理程序中取消导航(因此我可以弹出我的模式)。
4

2 回答 2

2

您可以在 durandal 的 canDeactivate 事件中执行此操作。

var canDeactivate = function () {
// Check if your data has unsaved changes with logic in hasChanges() method
if (hasChanges()) {
            var msg = 'Do you want to leave and cancel?';
            return app.showMessage('Message', 'Confirm Title', ['Yes', 'No'])
                .then(function (selectedOption) {
                    if (selectedOption === 'Yes') {
                       // Cancel your changes here
                    }
                    return selectedOption;
                });
        }
        return true;
};

这将取消基于用户选择的选项的导航。

于 2014-02-06T10:28:25.420 回答
0

只需canDeactivate向您的虚拟机添加一个方法;查看flickr.jsStarter Kit 示例,它几乎完全符合您的要求。

于 2014-02-06T01:18:14.020 回答