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