Jquery mobile 为什么我的主干路由器会重定向到应用程序根目录?

Jquery mobile 为什么我的主干路由器会重定向到应用程序根目录?,jquery-mobile,backbone.js,backbone-routing,Jquery Mobile,Backbone.js,Backbone Routing,我正在我的应用程序中使用以下路由器: app.Router = Backbone.Router.extend({ // define the route and function maps for this router routes : { "" : "showLogin", // Sample usage: http://ServerManager/ "login" : "login", // Sample us

我正在我的应用程序中使用以下路由器:

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(例如服务器/文件夹/文件夹1)临时闪烁。对这里发生的事情有什么想法吗?

主干路由器希望最后有更多的通用路由

设置
文件夹/:id
路径,然后设置
文件夹
路径

更新

事实上,经过思考后,情况可能并非如此。你能发布控制台输出吗?它调用了正确的函数吗


也许是
$.mobile。。。changeHash:true
冲突。您可能只需要让其中一个框架为您更改url哈希。

我尝试更改路由顺序并将changeHash设置为false,但结果相同。它临时加载页面,然后重定向到应用程序根目录。以前在主干文档中使用的这种“更通用的路由最后一个”的东西是胡说八道。你会注意到主干路由器文档不再说明
路由中的事情顺序(至少我再也找不到了)。OTOH,我想你可能是对的,jQuery Mobile和主干正在相互争斗。我已经禁用了所有jqm路由和导航。如果我在我的router showLogin函数中注释掉导航行,那么一切都可以正常工作(除了当我点击应用程序根目录时,它不会显示登录页面)。@muistooshort消息来源仍然说它遵循“最后更通用的路由”的概念。事实上,它只在我以这种方式将rails路由映射到主干时对我有效,也就是说,
posts/:id
posts/new
之后,我不确定问题出在哪里,但我认为这个插件最初是创建的,因为JQM没有很好地处理backbone.js。