首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用静态HTML文件的主干路由

使用静态HTML文件的主干路由
EN

Stack Overflow用户
提问于 2014-01-28 09:36:03
回答 1查看 1.3K关注 0票数 3

我正在开发一个网站,在那里我们使用第三方web服务返回动态内容,并使用javascript解析和显示从页面到页面的数据。我们已经在网站上的几个地方使用主干将数据发布到web服务,所以我想尝试使用主干的路由器来运行基于页面url的特定功能,并抓取查询,因为我们正在将查询散列到页面的url中。

例如: global-site-search.html#query

这是路由器的代码,我要说的是:

代码语言:javascript
运行
AI代码解释
复制
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。以前有人尝试过这样做吗?还是我试图将主干路由器扩展到更远的地方来处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 09:44:27

global-site-search.html来自您的服务器吗?,如果是,那么路由器的配置应该是

代码语言:javascript
运行
AI代码解释
复制
':query' : 'getSearchResults'

如果不是,那么您就不能这样做,因为Backbone.Router使用当前页面URL的hash部分来跟踪页面。而且,由于global-site-search.html不包含任何主干代码,所以它什么也做不了。只有在以某种方式将路由器代码注入global-site-search.html的情况下才有可能,在这种情况下这是非法的。

更新:这将允许您使用此路由':query' : 'getSearchResults'进行搜索。

代码语言:javascript
运行
AI代码解释
复制
Backbone.history.start({
    pushState: true,
    root: window.location.pathname
});

使用路由器时,需要设置正确的根,因此使用window.location.pathname是最简单的方法。此外,根据骨干文件

如果一个散列URL被一个支持推送状态的浏览器访问,它将透明地升级到真正的URL。请注意,使用真正的URL要求您的web服务器能够正确地呈现这些页面,因此也需要进行后端更改。例如,如果您有/documents/100的路由

既然你没有真正的后端来处理pushState,我建议你关掉它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21412714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文