Backbone Router不使用pushState

Gar*_*ett 10 .htaccess router requirejs backbone.js pushstate

我希望将每个页面请求重定向到我的index.html,并且在我的应用程序中单击任何链接(不是#urls - /real/urls)以便运行,router.js因此基本上没有页面刷新 - 纯粹是ajax.使用Backbone路由和htaccess有一个简单的方法吗?

如果我拿走{pushState: true}并格式化我的链接,我现在正在工作#login.但是,当我启用pushState并单击时#login,没有任何反应.相反,只有一次我刷新Backbone解释的页面#login并遵循渲染路线loginView.

这是我的路由器:

// Filename: router.js
define( [ 'views/beta/requestInvite', 'views/beta/login' ],
function(requestInviteView, loginView) {
    var AppRouter = Backbone.Router.extend( {
        routes : {
            // Pages
            'login' : 'login',

            // Default
            '*actions' : 'defaultAction'
        },

        // Pages
        login : function() {
            loginView.render();
        },

        defaultAction : function(actions) {
            requestInviteView.render();
        }
    });

    var initialize = function() {
        var app_router = new AppRouter;
        Backbone.history.start({pushState: true});
    };
    return {
        initialize : initialize
    };
});
Run Code Online (Sandbox Code Playgroud)

我想要发生的是requestInviteView,当/login点击链接时,网址会变为/loginloginView呈现.

谢谢你的帮助!

Ant*_*hua 10

从hash更改为pushstate并不是一件容易的事情,因为改变单个参数可能会导致思考.我所做的是在我的视图中捕获click事件并调用app.navigate来触发路由.

app.navigate("/login", {trigger: true});
Run Code Online (Sandbox Code Playgroud)

http://backbonejs.org/#Router-navigate


Dav*_*ulc 5

尽管安东尼的回答trigger: true是有效的,但使用通常不是最好的行动方案.相反,您的应用应该是结构化的,以便您可以navigate使用默认trigger值来调用false.

Derick Bailey在他的博客上讨论了这个问题:http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/(段落"The "AHA!"关于Router.Navigate的第二个论点的时刻")

此外,一整章解释更详细(包括为什么要离开路由triggerfalse)可以将此PDF书样本中才可下载免费:http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf(完全披露:我是书的作者)