2012-09-07 1 views
0

나는 내 응용 프로그램에서 다음 라우터를 사용하고 있습니다 :백본 라우터가 앱 루트로 리디렉션되는 이유는 무엇입니까?

app.Router = Backbone.Router.extend({ 
    // define the route and function maps for this router 
    routes : { 
     "" : "showLogin", 
     // Sample usage: http://ServerManager/ 
     "login" : "login", 
     // Sample usage: http://ServerManager/#login 
     "logout" : "logout", 
     // Sample usage: http://ServerManager/#logout 
     "folders" : "listFolders", 
     // Sample usage: http://ServerManager/#folders 
     "folders/:name" : "showFolder", 
     // Sample usage: http://ServerManager/#folders/System 
     "*other" : "defaultRoute" 
     // Sample usage: http://ServerManager/#badHash 
    }, 
    showLogin : function() { 
     console.log("Home page loaded. Redirecting to #login page."); 
     this.navigate("login", {trigger: true, replace: true}); 
    }, 
    login : function() { 
     //console.log("login route fired"); 
     // delete sessionStorage items and load a new loginview 
     this.changePage(new app.LoginView()); 
    }, 
    logout : function() { 
     //console.log("logout route fired"); 
     // Clear the token and other session items from sessionStorage 
     sessionStorage.clear(); 
     this.navigate("login", {trigger: true, replace: true}); 
    }, 
    listFolders : function() { 
     //console.log("listFolders route fired.") 
     if (app.folderView === undefined) { 
      console.log("creating new app.folderView"); 
      app.folderView = new app.FolderView(); 
     } 
     else { 
      console.log("using existing app.folderView"); 
     } 
     this.changePage(app.folderView); 
    }, 
    showFolder : function(name) { 
     console.log(app.router.routes[Backbone.history.fragment]); 
     //console.log("showFolder route fired.") 
     this.changePage(new app.ServiceView({folder : name})); 
     console.log(app.router.routes[Backbone.history.fragment]); 
     //app.router.navigate("folder/" + name, {trigger: false}); 
    }, 
    defaultRoute : function() { 
     alert("Error. Page doesn\'t exist."); 
    }, 
    changePage : function(page) { 
     $(page.el).attr("data-role", "page"); 
     page.render(); 
     $("body").append($(page.el)); 
     var transition = $.mobile.defaultPageTransition; 
     $.mobile.changePage($(page.el), {changeHash : true, transition : transition}); 
    } 
}); 

나는 그것이 성공적으로 서버/# 폴더에 응용 프로그램을 전송

app.router.navigate("folders", {trigger: true, replace: true}); 

사용하는 경우,하지만 난

app.router.navigate("folders/" + id, {trigger: true, replace: true}); 
을 통과 할 때

앱의 루트를 실행하고 로그인 페이지를로드합니다. 리디렉션이 발생하기 전에 올바른 URL (예 : server/folders/folder1)이 일시적으로 깜박이는 것을 확인할 수 있습니다. 여기에 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?

+0

나는 문제가 무엇인지 확실하지 않다 그러나 나는 JQM 좋은 재생되지 않았기 때문에 [JQuery와 모바일 라우터 (https://github.com/azicchetti/jquerymobile-router) 플러그인을 처음에 만들 생각 백본 .js. – Jack

답변

1

백본 라우터는보다 일반적인 경로를 더 오래 기다립니다.

세트 업 folders 경로 다음에 folders/:id 경로.

UPDATE 것은 사실

, 그것에 대해 생각 후,이 사건되지 않을 수 있습니다. 콘솔 출력을 게시 할 수 있습니까? 올바른 함수를 호출하고 있습니까?

는 아마도 $.mobile ... changeHash: true가 충돌합니다. 프레임 워크 중 하나에서만 URL 해시를 변경해야합니다.

+0

나는 경로의 순서를 바꾸고 changeHash를 false로 설정하려고했지만 같은 결과가 나왔다. 일시적으로 페이지를로드 한 다음 앱 루트로 리디렉션합니다. – Evan

+0

백본 (backbone) 문서에 사용 된이 "더 일반적인 경로 마지막"항목은 말도 안돼 [JavaScript 객체에 잘 정의 된 키 순서가 없습니다] (http://stackoverflow.com/a/10624559/479863). Backbone 라우터 문서가 더 이상'routes'에있는 물건의 순서에 대해 아무 것도 말하지 않는다는 것을 알게 될 것입니다 (적어도 더 이상 찾을 수 없습니다). –

+0

OTOH, 저는 jQuery Mobile과 Backbone이 서로 싸우고 있다고 생각합니다. –