0

我正在尝试使用历史主干根目录,但它在 IE(或其他不支持历史 API 的浏览器)上无法正常工作。

我的 webapp 有这张地图,每个模块都会发出请求,但动作应该调用一个函数

  • 站点/模块A/
  • 站点/模块A/action1/ID
  • 站点/模块B/
  • 站点/模块B/action1/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});

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

Every 在 Chr/FF(支持历史 API 的浏览器)上运行良好,并且 url 在浏览器中更新并且函数被调用。

但是,在 IE 中,url 被这种哈希格式替换:site/#moduleA/ 为了解决这个问题,我尝试在 history.start 中设置根目录

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

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

那么,为什么 IE 在 url 中重复 root 呢?我该如何解决这个问题?

提前致谢

4

1 回答 1

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

于 2012-06-07T18:14:32.170 回答