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点击链接时,网址会变为/login并loginView呈现.
谢谢你的帮助!
Ant*_*hua 10
从hash更改为pushstate并不是一件容易的事情,因为改变单个参数可能会导致思考.我所做的是在我的视图中捕获click事件并调用app.navigate来触发路由.
app.navigate("/login", {trigger: true});
Run Code Online (Sandbox Code Playgroud)
http://backbonejs.org/#Router-navigate
尽管安东尼的回答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的第二个论点的时刻")
此外,一整章解释更详细(包括为什么要离开路由trigger到false)可以将此PDF书样本中才可下载免费:http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf(完全披露:我是书的作者)