10

我想让每个页面请求重定向到我的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
    };
});

我想要发生的是requestInviteView,当/login点击链接时,url 更改为/loginloginView呈现。

谢谢你的帮助!

4

2 回答 2

10

从哈希更改为推送状态并不像人们想象的那样更改单个参数那么简单。我所做的是在我的视图中捕获点击事件并调用 app.navigate 来触发路由。

app.navigate("/login", {trigger: true});

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

于 2012-06-06T16:41:25.843 回答
5

虽然 Anthony 的回答会奏效,但使用trigger: true通常不是最好的做法。相反,您的应用程序应该结构化,以便您可以使用左侧navigate的默认值调用.triggerfalse

Derick Bailey 在他的博客http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/上谈到了这个问题(“The “啊哈!” 关于 Router.Navigate 的第二个参数的时刻“)

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

于 2013-05-20T17:58:41.027 回答