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

时间:2014-01-28 17:36:04

标签: javascript backbone.js router

我正在一个网站上工作,我们使用第三方网络服务返回动态内容,并使用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的路由器扩展到处理这个问题?

1 个答案:

答案 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,我建议你把它关掉