4

我现在把事情搞得一团糟。我更新到 Backbone.js 0.9.1,更新到基于斜杠的 URL 并开始使用pushstate:true. 5 天后,我在 IE9 上测试了我的应用程序,但 URL 并没有粘在它们链接到的页面上。

我做了这样的事情:

main.html

<a href="/signup">Do Signup</a>

浏览器mydomain.com/signup跳转一秒钟,然后用 URL 跳回 main.html mydomain.com/#signup

恢复到pushstate:true确实解决了简单链接的麻烦,但打破了我定义路由器以具有类似...的路由的东西

SignupRouter = Backbone.Router.extend({
  routes: {
    'signup': 'signup',
    'signup/:key': 'confirm'
  }, initialize: function() {
    // do some stuff here
  }, signup: function() {
    // signup view
  }, confirm: function() {
    // confirm view
  }
});

如果我不使用 pushstate,我必须回到为每个页面创建单独的路由并基于服务器端变量加载路由器的策略(我知道非常原始):

SignupRouter = Backbone.Router.extend({
  initialize: function() {
    // signup view
  }
});

ConfirmSignupRouter = Backbone.Router.extend({
  initialize: function() {
    // confirm view
  }
});

是否有一些 IE 友好的方式来执行此操作(IE7~9)?服务器端的一些解决方法?任何事物?

4

1 回答 1

7

如果关闭 pushState 使其在不支持它的浏览器中工作,则尝试使用骨干 PushState 测试先发制人地将其关闭(此代码基于 Backbone 源中的 _hasPushState 变量):

// Enable pushState for compatible browsers
var enablePushState = true;  

// Disable for older browsers
var pushState = !!(enablePushState && window.history && window.history.pushState);

Backbone.history.start({ pushState: pushState });
于 2012-02-28T16:11:57.827 回答