2014-02-05 32 views
1

我有一個Durandal應用程序,允許用戶更新個人資料信息的各個位。對於一些數據,用戶必須點擊「保存」來表示他們想保存他們的改變。攔截路線導航並詢問用戶「你確定你想離開這個頁面嗎?」

如果用戶嘗試從未保存的更改導航離開當前視圖,我們想攔截導航並彈出一個模式說:「您有未保存的更改 - 是否要在離開此視圖之前保存它們?」

但是,在回顧Durandal Router plugin documentation時,我無法確定如何在我的viewmodel中攔截導航請求。我想我想聽the router:route:activating event。但:

  1. 我不知道在哪裏以及如何爲此設置偵聽器。
  2. 我不知道如何取消導航(所以我可以彈出我的模態)在我的事件處理程序。
+0

如果談論任意鏈接點擊或其他UA導航並更改URL,則直接處理瀏覽器事件。 Durandal路由器不包含「導航前」行爲。 – user2864740

+0

從用戶的角度來看,這是網站最煩人的事情。抱歉。 –

回答

0

只需在您的虛擬機中添加一個canDeactivate方法;請參閱入門工具包示例中的flickr.js,該工具幾乎完全符合您的需求。

2

您可以在杜蘭達具有的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; 
}; 

這將取消基於用戶選擇的選項的導航。

相關問題