我正在尝试做一些非常简单的事情。
以下是该方案: 我有一个完整的网站与支持pushstate的浏览器一起工作。该网站的工作原理是语言是“实际页面”,例如:
/en/whatever/etc = index.en.php with with english headers and encoding & tweaks
/ar/whatever/etc = index.ar.php with with arabic headers and encoding & tweaks
/ru/whatever/etc = index.ru.php with with russian headers and encoding & tweaks
正如我所提到的,它非常光滑,与pushstate很好地配合使用。问题是当我尝试将相同的路由器代码与哈希替代方案一起使用时。
Backbone的路由器似乎想要这样做:
/#/en/whatever/etc = bad because it's not based correctly
/#/ar/whatever/etc = and so on
我想要它做的是:
/en/#whatever/etc
/ar/#whatever/etc
/ru/#whatever/etc
..and so on
or even:
/en/#/whatever/etc
/ar/#/whatever/etc
/ru/#/whatever/etc
..and so on
但是如果没有调整骨干源来实现这一点,我找不到方法。我有点反对改变backbone.js,除非我真的不得不因为未来的防范因素。
有人有任何想法吗?
答案 0 :(得分:5)
root
选项
引用文档:
如果您的应用程序未通过域的根网址提供,请务必告知历史记录根目录的位置,作为选项:
Backbone.history.start({pushState: true, root: "/public/search/"})
您将不得不在目标网页上执行一些代码,这些代码会查看他们正在使用的语言,然后将其发送到/[LANG CODE]/
。然后在您的服务器上,您只需将/[LANG CODE]/
的请求映射到您的.html文件。
在HTML文件中查看location.pathname
变量,删除第一个/[LANG CODE]/
部分,并将其用作选项哈希的root
值。
var lang = "/"+_.first(location.pathname.split('/')+"/";
Backbone.history.start({pushState: true, root: lang}); // if you're using pushState, otherwise omit or set to false
这会导致您的网址为:
/en/#whatever/etc
/ru/#whatever/etc