如何将骨干路由器应用于完整路径,而不是哈希

时间:2012-03-21 07:00:58

标签: javascript backbone.js coffeescript

这种可能性存在吗?我们的网站不是一个页面,而是在application.js内压缩的所有js文件,我可以使用骨干路由器进行location.path解析吗?

我尝试Backbone.history.start(pushState: true)。它适用于我,但它是否正确?我只需要初始解析,而不是复杂的路由和通过Backbone.Router重定向。

4 个答案:

答案 0 :(得分:13)

您可以使用标准路由器。当您实例化它并启动历史记录对象时,您可以设置它应该用作其基础的根目录。在这种情况下,您似乎想要使用'/'

var MyRouter = Backbone.Router.extend({
    routes: {
        "application/": "somefunc"
    }
}

var app = new MyRouter();
Backbone.history.start({pushState: true, root: '/'});

无论何时在服务器上调用任何目录,您都需要将Web服务器设置为提供HTML文件(因此,骨干,而不是rails,将处理您的路由)。

最后,在HTML文件中,我有一个在Dom准备就绪的函数,并将路径拉出URL并将其传递给navigate

var path = location.pathname;
app.navigate(path, {trigger: true});

答案 1 :(得分:1)

我正在使用它:

window.location.href.replace(Backbone.history.getFragment(), '');

获取主干应用根的绝对网址。

答案 2 :(得分:0)

你需要编写自己的路由器,但幸运的是,这很简单。这是我刚为我正在撰写的网站撰写的文章:

var routes = {
  "terms": "terms",
  "privacy": "privacy",
  "password-reset": "reset"
};

var path = window.location.pathname.replace("/", "");
var page = routes[path];
if (!page) {
  page = "404";
}

我不需要Backbone提供的任何花哨的匹配规则,但用正则表达式扩展这个想法并不难。或者有人可能会编写一个使用Backbone匹配逻辑的小模块,但不会执行hash / pushState重定向。

答案 3 :(得分:-1)

我有同样的IE问题,有一个简单的解决方案。下载modernizr并加入。

然后做:

Backbone.history.start({ pushState: Modernizr.history });

这应该可以解决问题。