我希望将每个网页请求重定向到我的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
。
感谢您的帮助!
答案 0 :(得分:10)
从hash更改为pushstate并不是一件容易的事情,因为改变单个参数可能会导致思考。我所做的是在我的视图中捕获click事件并调用app.navigate来触发路由。
app.navigate("/login", {trigger: true});
答案 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(完整披露:我是书的作者)