Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 拦截路线导航并询问用户“;您确定要离开此页吗?“;_Knockout.js_Durandal_Durandal 2.0_Durandal Navigation - Fatal编程技术网

Knockout.js 拦截路线导航并询问用户“;您确定要离开此页吗?“;

Knockout.js 拦截路线导航并询问用户“;您确定要离开此页吗?“;,knockout.js,durandal,durandal-2.0,durandal-navigation,Knockout.js,Durandal,Durandal 2.0,Durandal Navigation,我有一个Durandal应用程序,允许用户更新不同的个人资料信息。对于某些数据位,用户必须单击“保存”以指示他们要保存更改 如果用户试图使用未保存的更改从当前视图导航,我们希望拦截导航并弹出一个模式,说明“您有未保存的更改--是否要在离开此视图之前保存它们?” 然而,在回顾中,我无法确定如何在viewmodel中拦截导航请求。我想我想听一听。但是: 我不确定在哪里以及如何为此设置侦听器 我不知道如何取消事件处理程序中的导航(这样我就可以弹出我的模式) 只需将canDeactivate方法添加到您

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

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

然而,在回顾中,我无法确定如何在viewmodel中拦截导航请求。我想我想听一听。但是:

  • 我不确定在哪里以及如何为此设置侦听器
  • 我不知道如何取消事件处理程序中的导航(这样我就可以弹出我的模式)

  • 只需将
    canDeactivate
    方法添加到您的虚拟机中;看看Starter Kit示例中的
    flickr.js
    ,它几乎完全符合您的要求。

    您可以在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;
    };
    

    这将根据用户选择的选项取消导航。

    如果谈论任意链接单击或其他UA导航,如更改URL,则直接处理浏览器事件。库存Durandal路由器不包含“导航前”行为。在用户看来,这是网站能做的最烦人的事情。很抱歉