在Backbone.js中组合散列和非散列URL

时间:2012-01-29 18:40:17

标签: javascript backbone.js shebang

在Backbone.js应用程序中如何组合哈希非哈希网址?

我设置Backbone.history.start({pushState: true})。当用户点击某个链接时,我从服务器,更新页面获取JSON数据,并致电Backbone.history.navigate以更改浏览器中的URL(例如从example.com/zlinsky/kampan/mf/example.com/moravskoslezsky/kampan/mf/)。
如果用户从浏览器复制URL并在第二个选项卡中打开,他将看到相同的页面(因此每个更新的页面在服务器上都有相应的页面)。这正是我想要的。

但现在我有问题......

我在页面上也有几个<select>。当用户更改其中的值时,我在页面上进行一些动态更改(不从服务器获取JSON,仅在客户端进行更新)。我想根据<select>更改网址,例如更改为example.com/moravskoslezsky/kampan/mf/#state1(因此,当有人发送此网址时,另一方会看到相同的网页,处于与发件人相同的状态)。

我找不到方法,如何在Backbone.js中做到这一点。如果我在pushState: true上设置Backbone.history,则Router会忽略哈希标记 如果我设置了pushState: false,我就无法像上面第一段中描述的那样设置网址。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:2)

您可以致电:     Backbone.history.navigate( "/foo/bar#fragment" )

但我认为这不是一个好主意,因为ie不支持pushstate,所以骨干将使用hash bang urls(在ie中)。

也许您可以使用查询字符串:Backbone.history.navigate( "/foo/bar?foo=bar", true ),它将出现在现代浏览器中:http://domain.tld/foo/bar?foo=bar和ie http://domain.tld#/foo/bar?foo=bar