2013-02-11 4 views
0

백본 응용 프로그램에 문제가 있습니다. 가져 오기가 실패 할 때 (시간 초과 또는 일반적인 오류) 사용자에게 알림을 제공하려고하지만 새 페이지에 오류 메시지를 표시하는 대신 이전 페이지의 콘텐츠에 대한 대화 상자를 표시하려고합니다 (Facebook/LinkedIn 등이 it)백본 가져 오기 실패 알림

새 콘텐츠 요청을 시작하려면 먼저 새 URL로 이동해야합니다. 우리는 재 작업없이 이것을 변경할 수 없기 때문에 가능한 경우이를 피하고 싶습니다. 우리가해야 할 일은 연결 오류가 발생했을 때 사용자를 이전 URL로 되돌려 보내는 것입니다. 그러면 라우트가 시작되어 이전 내용을 다시 요청하게됩니다. 우리는 그러나 이것을 피하고 싶습니다.

경로를 트리거하지 않고 탐색을 사용하여 사용자를 다시 보낼 수 있지만이 경우 브라우저 기록이 엉망으로되어 앞으로 거꾸로됩니다. 또한 브라우저를 다시 강제 실행하여 기록 추적을 올바르게 유지할 수 있지만 강제로 콘텐츠를 다시 가져올 수 있습니다.

우리는 라우터가 다음 경로 변경시 데이터를 다시 요청하지 않도록하는 플래그를 설정하는 방법을 조사했지만, 브라우저 백을 사용하여 가져 오기가 수행 된 이전 화면으로 이동할 때 문제가 발생할 수 있습니다. 실패합니다. 이 경우 우리는 여행 중에 사용자에게 '전달'을 보내야합니다. 우리가 아는 한 브라우저의 히스토리 관리자를 사용해서는 불가능합니다.

우리가 원하는 방식으로 대화하는 방법이 있습니까, 아니면 Facebook/LinkedIn 및 공동과 같은 방식으로 진행해야합니까?

답변

1

코드 예/시도한 내용이 있습니까?

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(); 
      } 
     }) 
    } 
}); 

다음 :

당신의 URL은 예를 들어, 당신은 자동으로 라우터를 사용하여 다시 이전 URL로 사용자를 리디렉션 할 수 변경된 후 모델 데이터를 가져 오는 오류가있는 경우에 당신이 말한 떨어져 간다 귀하의 라우터에 귀하의 기록의 배열을 유지할 수 있도록 경로가 '리디렉션'에 트리거되지 않습니다. 또는 간단하게 수행하여 :

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