Backbone Router不使用pushState

时间:2012-06-06 06:27:50

标签: .htaccess backbone.js requirejs router pushstate

我希望将每个网页请求重定向到我的index.html,并在我的应用中点击(不是#urls - / real / urls)链接以运行{{1}所以基本上没有页面刷新 - 纯粹是ajax。使用Backbone路由和htaccess有一种简单的方法吗?

如果我带走router.js并格式化{pushState: true}之类的链接,我现在就可以使用它了。但是,当我启用#login并点击pushState时,没有任何反应。相反,只有在我刷新页面后Backbone才会解释#login并遵循路由来呈现#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并呈现/login

感谢您的帮助!

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分: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/的博客上谈到了这个问题(“AHA!”关于Router.Navigate的第二个论点的时刻“)

此外,还可以在此pdf图书示例中免费下载整个章节(更详细地解释路由(包括您应将trigger留给false的原因):http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf(完整披露:我是书的作者)

相关问题