Backbone.js 没有哈希回退和更好的后退/转发状态支持的主干路由器的替代方案?

Backbone.js 没有哈希回退和更好的后退/转发状态支持的主干路由器的替代方案?,backbone.js,pushstate,backbone-routing,Backbone.js,Pushstate,Backbone Routing,我目前正在为我的SPA使用主干路由器。它可以正常工作,但我有一些小问题: 问题是-我想要pushState导航或none,这意味着-appstate会被执行(当我将“初始”URL传递给路由器或通过JS触发路由时),但地址栏不会改变。我不想要IE9的hashChange回退。如果IE9没有返回按钮和更改地址栏,但仍保留应用程序中的导航状态,那么它就可以正常工作。然后,我可以向用户显示一个URL,他们可以将其作为书签,服务器将路由该页面,应用程序状态将基于初始URL引导。在应用程序内导航期间,IE中

我目前正在为我的SPA使用主干路由器。它可以正常工作,但我有一些小问题:

问题是-我想要
pushState
导航或none,这意味着-appstate会被执行(当我将“初始”URL传递给路由器或通过JS触发路由时),但地址栏不会改变。我不想要IE9的hashChange回退。如果IE9没有返回按钮和更改地址栏,但仍保留应用程序中的导航状态,那么它就可以正常工作。然后,我可以向用户显示一个URL,他们可以将其作为书签,服务器将路由该页面,应用程序状态将基于初始URL引导。在应用程序内导航期间,IE中的地址栏不会改变,这是我愿意接受的折衷方案

我遇到的另一个问题是,我正在为截获的HREF使用
navigate(url,{trigger:true})
,而后退按钮不起作用(什么也不做)。但是我真的需要在前向/后向导航上更改应用程序状态,即使它是为那个特定的URL重建的——我宁愿重建状态

我可以使用哪些路由器?正如我所说,我不想有hashbang回退(意思是——我只想有一种在应用程序中表示URL的方法,period)


我应该用什么?Director.js?History.js?似乎有相当多的路由器/历史库,但哪一个最接近我正在寻找的?。

如果你有Modernizer来扫描HTML5历史支持,如果我理解得很好,那么在你的主布局js文件中添加事件不是一个快速的解决方案吗

'click a' : "navigate"
并添加导航到此布局的功能,如下所示

navigate : function(e){
    if(!Modernizr.history) document.location.href = $(e.currentTarget).attr("href");
},

为了优化,当然,只有在不支持历史的情况下,才可以绑定它,不要忘记在布局中包含“Modernizer”。希望这对你来说是一个有趣的答案。

试试Hi@Julik,当你说
地址栏不会改变
时,这意味着如果你写初始路径,例如
domain.com/page/one
,它将呈现内容,并“永远”停留在该路径中?即使你导航到另一个页面?我的意思是,在IE上,我会截取对
a
元素的点击,并相应地更改应用程序状态,但不会记录在浏览器历史记录中-URL将保持在页面加载时的位置。我可以这样做,但这将完成整个页面的重新加载,我只想更改内部应用程序状态。好吧,那么为什么不使用自定义事件而不是路由呢?我的意思是,例如,在上面创建的导航函数中,在布局
this.trigger(“goto”{whateverParamsYouNeedHere:true})中进行操作并且在初始化时在路由器中执行
var that=this;this.listenTo(您观察到的布局,“goto”,函数(e){this.controller.theFunctionToNavigate(e.whateverParamsYouNeedHere);})因为我的大多数应用程序结构都基于URL,即使它们在地址栏中可能不可见。因此,我不想将处理程序附加到UI的特定元素,而是希望它们通过具有right HREF属性来触发路由器。