【问题标题】:Backbone.js: workaround for implementing slash based URL using pushstate in Internet ExplorerBackbone.js:在 Internet Explorer 中使用 pushstate 实现基于斜杠的 URL 的解决方法
【发布时间】:2012-02-24 10:05:59
【问题描述】:

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

我做了这样的事情:

main.html

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

浏览器转到mydomain.com/signup 片刻,然后跳转回main.html,URL 为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)?服务器端的一些解决方法?有什么事吗?

【问题讨论】:

    标签: internet-explorer backbone.js pushstate


    【解决方案1】:

    如果关闭 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 });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-08-13
      • 1970-01-01
      • 2015-08-11
      • 2013-11-28
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多