IE上的骨干路由

时间:2012-06-07 16:16:31

标签: javascript backbone.js browser-history

我正在尝试使用历史骨干根,但它在IE(或其他不支持历史记录API的浏览器)上运行不正常。

我的网络应用有这张地图,其中每个模块发出请求,但操作应该调用功能

  • 站点/ moduleA /
  • 站点/ moduleA /动作1 / ID
  • 站点/ moduleB /
  • 站点/ moduleB /动作1 / ID

映射:

var MyRouter = Backbone.Router.extend({
    routes: {
        "moduleA/": "homeA",
        "moduleA/action1/:id": "action1", 
        // ...
    }
}

var app = new MyRouter();
Backbone.history.start({pushState: true});

我正在使用它进行导航:

app.navigate('moduleA/',{trigger:true});

app.navigate('/moduleA/action1/4334',{trigger:true});

(我正在获取链接点击事件并调用导航(link.href,{trigger:true})

Chr / FF(支持历史API支持的浏览器)上的每一个都正常工作,并且在浏览器中更新了URL并且函数被调用。

然而,在IE中,url被这种哈希格式替换:site / #moduleA / 为了解决这个问题,我尝试在history.start中设置root。

Backbone.history.start({pushState: true, root:'/moduleA/'});

但是,现在IE使用以下格式替换url: site / moduleA /#moduleA / site / moduleA / #moduleA/action1 / 432432

那么,为什么IE在网址中重复根? 我该如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:0)

通过将root设置为'/moduleA/',您告诉骨干使用site/moduleA作为根,这是预期的行为。

骨干记忆

routes: {
    "moduleA/": "homeA",  // #moduleA/
    "moduleA/action1/:id": "action1" // #moduleA//action1/:id
}

不同
routes: {
    "/moduleA/": "homeA",  // #/moduleA/
    "/moduleA/action1/:id": "action1" // #/moduleA//action1/:id
}

使用app.navigate时要记住这一点。