是否可以使路由器实现类似于以下内容?
var Router = Backbone.Router.extend({
routes: {
'' : 'search',
'*querystring' : 'results'
},
search: function() {
// load search view
},
results: function(querystring) {
// load search view
// make ajax request using querystring
}
});
搜索视图有一个表单,提交时应转到结果视图,该视图将解析查询的URL,提交ajax请求,然后显示响应。
显然这样的事情会更有意义
'results?*querystring' : 'results'
但我无法通过该格式提交表单。
将表单操作设为<form action="index.html/results">
时,我会将http://localhost:8000/index.html/results?c=foo&a=bar
作为我的网址。
这很接近,但我确实需要http://localhost:8000/index.html#/results?c=foo&a=bar
,当我尝试使用<form action="index.html#/results">
时,它会给我http://localhost:8000/index.html?c=foo&a=bar#/results
这不是我想要的:(
这就是为什么我宁愿没有表单操作,而是有一条路径可以解析查询(如果存在)。
好的,谢谢你的阅读。希望有人了解其中一些并可以帮助我。
答案 0 :(得分:0)
不要将pushstate设置为true,将其设置为false
Backbone.js PushStates: Fallback for Internet Explorer not working
答案 1 :(得分:0)
<强>路由器强>
routes:{
'search':'search' //queryString is automatically passed as last param in backbone 1.1
},
search: function(queryString){
//Write your logic to do the search
}
查看:强>
events:{
'submit form':'preventAndNavigate'
},
preventAndNavigate: function(e){
e.preventDefault();
var query = $(e.currentTarget).serialize();
Backbone.history.navigate('search?'+query,{trigger:true});
}
文档:
Backbone Routers现在处理路径片段中的查询参数,并将它们作为最后一个参数传递给处理程序。指定为字符串的路由不应再包含查询字符串(&#39; foo?:query&#39;应该是&#39; foo&#39;)。
参考文献: