这种可能性存在吗?我们的网站不是一个页面,而是所有压缩的js文件 application.js
,我可以使用骨干路由器 location.path
解析?
我试试 Backbone.history.start(pushState: true)
。它适合我,但它是否正确?我只需要初始解析,而不是复杂的路由和重定向 Backbone.Router
。
这种可能性存在吗?我们的网站不是一个页面,而是所有压缩的js文件 application.js
,我可以使用骨干路由器 location.path
解析?
我试试 Backbone.history.start(pushState: true)
。它适合我,但它是否正确?我只需要初始解析,而不是复杂的路由和重定向 Backbone.Router
。
您可以使用标准路由器。当您实例化它并启动历史记录对象时,您可以设置它应该用作其基础的根目录。在这种情况下,你似乎想要使用'/'
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});
我用这个:
window.location.href.replace(Backbone.history.getFragment(), '');
获取骨干应用程序根目录的绝对URL。
你需要编写自己的路由器,但幸运的是,这很简单。这是我刚为一个我正在研究的网站写的:
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重定向。
我有同样的IE问题,有一个简单的sollution。下载 Modernizr的 并包括它。
然后做:
Backbone.history.start({ pushState: Modernizr.history });
这应该可以解决问题。