2012-12-06 6 views
2

django에서 앱을 개발 중이며 backbone.js를 사용 중입니다. URL은 백본 라우터를 사용하여 라우팅됩니다. 내 HTML은 하나의 정적 페이지에 있습니다. 예를 들어, href="/user/home" 링크를 클릭하면 페이지가로드되고 URL이있는 브라우저를 새로 고치면 (http 요청 보내기) 장고 urls에 해당 URL이 없으므로 404 오류가 발생합니다. .backbone.js를 사용하는 url 디스패치

페이스 북 (django_facebook)을 사용하여 로그인 할 때 페이스 북에 로그인 할 때마다 빈 페이지 (다른 잘못된 URL이이 스플래트 때문에 수행하는 방식 - - {"*action" : "defaultRoute"} 참조), 브라우저를 새로 고치면 URLS.PY에 url(r'^facebook/', include('django_facebook.urls'))이 있기 때문에 브라우저가 작동합니다 (로그인 할 때 fb 탭이 열림).

내 문제는 링크를 클릭하고 fb 탭 또는 팝업 창이 열려있는 경우입니다.이 경우 작동하지 않기 때문에 브라우저의 URL을 눌러 작동시켜야합니다.

backbone.js 라우터

Api.Routers.MainRouter = Backbone.Router.extend({ 
routes: { 
    ":user/messages/:action/:target": "messagesAction", 
    ":user/challenge/:action/:target" : "gameScores", 
    ":user/challenge/:action/:target/:bet" : "challengeResult", 
    ":user/challenge/:action": "challengeAction", 
    ":user/:action" : "userAction", 
    ":user/friends/:action/:target" : "friendsAction", 
    "*action" : "defaultRoute" 
}, 
messagesAction: function (user, action, target) { 
    myScrollAction = action; 
    conversationAction (action); 
    //HIGHTLIGHT FOOT NAV 
    $(".selected").removeClass("selected"); 
    $("#nav-messages").parents("li").addClass("selected"); 

    $(".message-friend-name").html(target.replace(/%20/g, " ")) 
}, 
challengeResult: function (user, action, target, bet) { 
    defaultRouterAction (action); 
    myScrollAction = action; 
    ... 

감사합니다.

+0

해시 (#) 뒤에 추가되어야하는 백본 경로가 아닙니다. 내게는 라우팅이 전혀 작동하지 않는 것 같습니다. – migajek

+1

@migajek은 HTML5 기록 개체를 지원하지 않는 브라우저에서만 사용할 수 있습니다 (IE8 & IE9) – tkone

답변

0

여기 두 가지 질문을하는 것처럼 들립니다.

첫 번째 질문은 백본 라우터에 장고 앱에없는 경로가 있다는 것입니다.

그래서 라우터가 인계 받으면 실제로 해시 조각을 사용하는 IE8 & 9에 있지 않는 한 라우터가 새로운 기록을 브라우저의 기록 스택에 푸시합니다. 즉, 브라우저가 다시로드되면 서버에서 해당 리소스를 요청하게됩니다.

404가 발생하는 것을 방지하려면 히스토리 개체를 사용하거나 백본 라우터에있는 모든 경로도 장고 URL 구성에서 미러링해야합니다.

두 번째 질문은 Facebook 로그인 사용에 관한 것입니다. 이 부분을 분리해서 다시 쓰는 것이 좋습니다. 장고 플러그인에 관한 것이기 때문에 사용하면 훨씬 더 좋은 견인력을 얻을 수 있습니다.

관련 문제