2012-06-29 9 views
2

나는 백본과 함께 장치를 사용하고 있습니다. 모든 백본 경로가 정상적으로 작동합니다. 그러나 레일스로 렌더링해야하는/accounts/login과 같은 비 백본 경로는 백본 라우터로 묶여 있습니다.백본 라우터 globbing 비 백본 경로

SS.Routers.ApplicationRouter = Backbone.Router.extend({ 
    initialize: function() { 
    this.el = $("#content"); 
    }, 

    routes: { 
    "": "home" 
    }, 

    "home": function() { 
    console.debug("Got home request"); 
    var view = new SS.Views.Home(); 
    this.el.empty().append(view.render()); 
    } 
}); 

/accounts/login에 대한 실제 요청/응답은 레일스 로그에서 발생합니다. 그러나 백본 홈 루트가 나중에 실행되고 내 홈 페이지가 렌더링됩니다.

다시는 내 집에 경로를 유발하는

$(function() { 
    SS.init(); 
    }); 

window.SS = { 
    Models: {}, 
    Collections: {}, 
    Views: {Providers: {}}, 
    Routers: {}, 
    init: function (data) { 
    console.debug("Initializing Backbone Components"); 
    new SS.Routers.ApplicationRouter(); 
    new SS.Routers.ProvidersRouter(); 
    if (!Backbone.history.started) { 
     Backbone.history.start(); 
     Backbone.history.started = true; 
    }; 
    } 
}; 

에서 내 레이아웃이 있습니다.

""백본의 경로는 globbing/accounts/login이 아닌 것으로 간주됩니다.

프래그먼트가 빈 문자열이기 때문에 약간의 디버깅이 "/ accounts/login이 (는)"절뚝 거리며 표시되고 있습니다.

그리고 조각은 백본 경로와 일치하는 모든 경우에 빈 문자열입니다. 백본 0.9.2

loadUrl: function(fragmentOverride) { 
     var fragment = this.fragment = this.getFragment(fragmentOverride); 
     var matched = _.any(this.handlers, function(handler) { 
     if (handler.route.test(fragment)) { 
      console.debug(handler); 
      console.debug(fragment); 
      handler.callback(fragment); 
      return true; 
     } 
     }); 
     return matched; 
    }, 

어떤 제안이에서

코드?

+0

'/ accounts/login'은 일반적인 링크입니까, 아니면 AJAX입니까? 어떻게 접근합니까? –

+0

예. 전통적인 링크, 아니 아약스. – user689541

+0

그리고 어떤 페이지로 돌아갑니다? 백본 경로가 트리거되고 있습니까? –

답변

0

클래스 ('passThrough') 또는 'data-passThrough = true'속성을 링크에 추가하십시오. 라우터에서이 클래스/속성을 잡아서 true를 반환하면 Backbone이 처리를 중단하고 브라우저가 이것을 일반 링크로 처리합니다.