这种可能性存在吗?我们的网站不是一个页面,而是在application.js
内压缩的所有js文件,我可以使用骨干路由器进行location.path
解析吗?
我尝试Backbone.history.start(pushState: true)
。它适用于我,但它是否正确?我只需要初始解析,而不是复杂的路由和通过Backbone.Router
重定向。
答案 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 });
这应该可以解决问题。