2013-02-11 43 views
0

我們的骨幹應用程序出現問題。我們希望在抓取失敗(超時或一般錯誤)時向用戶提供通知,但我們希望在上一頁的內容上顯示一個對話框,而不是在新頁面中顯示錯誤消息(Facebook/LinkedIn如何執行它)骨幹提取失敗通知

要觸發新內容的請求,我們必須先導航到新的URL。如果沒有返工,我們不能真正改變這一點,所以我們希望儘可能避免這種情況。我們需要做的是在發生連接錯誤時將用戶發送回先前的URL,這會導致路由觸發,重新請求以前的內容。然而,我們真的想避免這樣做。

我們知道,我們可以在不觸發路線的情況下使用導航返回用戶,但這會弄亂瀏覽器歷史記錄,在這種情況下會使瀏覽器的歷史記錄變爲向前。我們也可以強制瀏覽器返回,保持歷史記錄正確,但這會強制重新獲取內容。

我們還調查了設置某種標誌告訴我們的路由器不要在下一次路由改變時重新請求數據,但是當瀏覽器返回被用於轉到前一個屏幕時,會導致問題失敗。在這種情況下,我們需要在用戶的旅程中發送用戶的「轉發」。據我們所知,使用瀏覽器的歷史管理器是不可能的。

有沒有什麼方法讓我們想要對話,或者我們必須像Facebook/LinkedIn和合作一樣?

回答

1

你有你的代碼/你試過的例子嗎?

去關閉你的說法,如果提取模型數據後,您的網址已經改變,你可以使用路由器默默地將用戶重定向回以前的URL,例如一個錯誤:

window.product_v = Backbone.View.extend({ 
    render: function() { 
     this.model.fetch({ 
      processData: true, 
      data: this.model.attributes, 
      success : function(d){ 
      }, 
      error : function(d) { 
       MyRouter.previous(); 
      } 
     }) 
    } 
}); 

然後在你的路由器可以保存你的歷史數組,使得路由在重定向時不被「觸發」。或者簡單地做:

Backbone.history.navigate(route, {trigger: false, replace: true}); 

下面的提問/回答描述了這一完美:

Silently change url to previous using Backbone.js

class MyRouter extends Backbone.Router 
    constructor: (options) -> 
     @on "all", @storeRoute 
     @history = [] 
     super options 

    storeRoute: -> 
     @history.push Backbone.history.fragment 

    previous: -> 
     if @history.length > 1 
      @navigate @history[@history.length-2], true 
+0

感謝您的答覆。我不確定這是否能解決所有問題,因爲瀏覽器仍然會將用戶導航到歷史記錄中的頁面取消,因此反擊會基本上讓用戶轉發。是否有任何方法完全從瀏覽器歷史記錄中刪除路由。 – brins0 2013-02-11 20:44:51