我正在一个网站上工作,我们使用第三方网络服务返回动态内容,并使用javascript解析并显示该数据到页面。我们已经在网站上的几个地方使用骨干网将数据发布到网络服务,所以我想到尝试使用Backbone的路由器来运行基于页面网址的特定功能并抓取查询,因为我们正在将查询哈希到页面的网址。
例如:global-site-search.html #query
这是我到目前为止的路由器代码:
var Router = Backbone.Router.extend({
routes : {
'' : 'indexRoute',
'global-site-search.html(:query)' : 'getSearchResults'
},
indexRoute: function(query) {
console.log("indexRoute");
},
getSearchResults: function(query) {
console.log("getSearchResults with query", query);
}
});
var WaRouter = new Router();
Backbone.history.start({
pushState: true,
root: '/'
});
但是当我使用像global-site-search.html#query这样的网址点击页面时,查询值返回null。有没有人试过这个或者我试图将Backbone的路由器扩展到处理这个问题?
答案 0 :(得分:1)
您的服务器是global-site-search.html
吗?如果是,那么路由器的配置应为
':query' : 'getSearchResults'
如果不是,则您不能这样做,因为Backbone.Router
使用当前页面网址的hash
部分来跟踪网页。由于global-site-search.html
不包含任何骨干代码,因此无法执行任何操作。只有当你以某种方式将路由器代码注入global-site-search.html
时才有可能,这在这种情况下是非法的
更新:这应该允许您使用此路线':query' : 'getSearchResults'
Backbone.history.start({
pushState: true,
root: window.location.pathname
});
使用路由器时,需要设置正确的root,因此使用window.location.pathname
是最简单的方法。另外,根据Backbone文档
如果支持pushState的浏览器访问了哈希URL,它将透明地升级到真正的URL。请注意,使用真实URL要求您的Web服务器能够正确呈现这些页面,因此也需要进行后端更改。例如,如果您的路线为/ documents / 100`
由于你没有任何真正的后端来处理pushState,我建议你把它关掉