Backbone.history.navigate,IE< = 9

时间:2013-04-19 10:45:41

标签: backbone.js

使用Backbone历史记录/推送状态时出现问题 - 但仅限于不支持它的浏览器(旧IE)

问题是这个。当我第一次访问/en_gb/dashboard时 - 在所有浏览器中一切正常。但是,在IE< = 9中,它会将#dashboard附加到地址栏,形成/en_gb/dashboard#dashboard。现在,当我点击刷新时,我的路由器没有触发。

并非我的所有网站都受到Backbone控制 - 因此路由器正在运行:

routes: {
  'dashboard': 'showDashboard'
}

我的引导程序如下所示:

if (Backbone.history) {

  var pushStateSupported = _.isFunction(history.pushState);
  var urlRoot = '/en_gb/';
  var enableSilent = !pushStateSupported;

  Backbone.history.start({
    pushState: pushStateSupported,
    root: urlRoot,
    silent: enableSilent
  });

  if (!pushStateSupported) {
    Backbone.history.navigate(window.location.pathname.substring(urlRoot.length), { trigger: true });
  }
}

添加调试,我可以看到Backbone.history.navigate()始终被调用,但是当存在该哈希时,trigger: true似乎没有被选中。

1 个答案:

答案 0 :(得分:0)

嗯 - 我似乎修好了 - 虽然不是一个优雅的解决方案,但它确实为我解决了这个问题:

if (!pushStateSupported) {
    var route = window.location.pathname.substring(urlRoot.length);
    Backbone.history.navigate('/#' + route, { trigger: true });
}

地址栏中的网址显示为/en_gb/dashboard##dashboard并不优雅 - 但它现在正在通过Backbone.navigate()方法。

之前它失败了
if (this.fragment === fragment) return;