我正在开发一个网站,在那里我们使用第三方web服务返回动态内容,并使用javascript解析和显示从页面到页面的数据。我们已经在网站上的几个地方使用主干将数据发布到web服务,所以我想尝试使用主干的路由器来运行基于页面url的特定功能,并抓取查询,因为我们正在将查询散列到页面的url中。
例如: 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: '/'
});
但是,当我使用url访问页面时,比如全局站点-search.html#查询,查询值将返回null。以前有人尝试过这样做吗?还是我试图将主干路由器扩展到更远的地方来处理这个问题?
发布于 2014-01-28 09:44:27
global-site-search.html
来自您的服务器吗?,如果是,那么路由器的配置应该是
':query' : 'getSearchResults'
如果不是,那么您就不能这样做,因为Backbone.Router
使用当前页面URL的hash
部分来跟踪页面。而且,由于global-site-search.html
不包含任何主干代码,所以它什么也做不了。只有在以某种方式将路由器代码注入global-site-search.html
的情况下才有可能,在这种情况下这是非法的。
更新:这将允许您使用此路由':query' : 'getSearchResults'
进行搜索。
Backbone.history.start({
pushState: true,
root: window.location.pathname
});
使用路由器时,需要设置正确的根,因此使用window.location.pathname
是最简单的方法。此外,根据骨干文件
如果一个散列URL被一个支持推送状态的浏览器访问,它将透明地升级到真正的URL。请注意,使用真正的URL要求您的web服务器能够正确地呈现这些页面,因此也需要进行后端更改。例如,如果您有/documents/100的路由
既然你没有真正的后端来处理pushState,我建议你关掉它。
https://stackoverflow.com/questions/21412714
复制相似问题