Почему мой магистральный маршрутизатор перенаправляет в корень приложения?

Я использую следующий маршрутизатор в моем приложении:

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

он успешно отправляет приложение в папки server/#, но когда я передаю

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

он запускает корень приложения и загружает мою страницу входа. Я вижу, что правильный URL-адрес (например, сервер / папки / папка1) временно мигает до того, как произойдет перенаправление. Есть идеи о том, что здесь происходит?

1 ответ

Магистральные маршрутизаторы ожидают более общих маршрутов в последнюю очередь.

Настройте folders/:id маршрут, по которому следует folders маршрут.

ОБНОВИТЬ

На самом деле, подумав об этом, это может быть не так. Можете ли вы опубликовать вывод консоли? Это вызывает правильную функцию?

Возможно, $.mobile ... changeHash: true противоречив. Вы, вероятно, должны иметь только одну из платформ, чтобы изменить хэш URL для вас.

Другие вопросы по тегам