Backbone - 如果使用.navigate({replace:true}),history.back()会重新加载页面

时间:2014-05-26 09:04:54

标签: javascript jquery backbone.js navigation browser-history

我在Backbone导航方面遇到了这个奇怪的问题。我阅读了很多帖子,无法找到与我的问题相关的任何内容。

所以情况就是这样:假设我们有页面:A,B和C.
B是编辑页面,我不想将其包含在历史记录中。

如果用户在页面A上,则转到B,然后转到C.如果他单击后退按钮,则应将其重定向到A.

因此,为了使其工作,我会听取元素上的所有单击事件,拦截它们,并调用Backbone.history.navigate()方法。另外我检查当前的url,如果它是B,我将{replace:true}参数传递给navigate(),以便从历史记录中省略B。

基本上它起作用,B从历史中省略。只有在跳过B重新加载页面的情况下,才会改变视图。如果跳过非路由,则无需重新加载即可运行。

所以,例如:

  • 如果我从A到B,请点击"返回",浏览器返回A,不重新加载,用幻灯片动画取代视图
  • 如果我从A到B再到C,请单击"返回",浏览器转到A,但重新加载页面。所以我不会'请参阅幻灯片动画,但使用闪烁的空白页完整重新加载。

我没有使用pushState。目前正在Chrome上进行测试。

欢迎任何建议。我坚持了几个小时。无论我尝试什么导致了相同的行为。我尝试启用pushState,没有变化。

1 个答案:

答案 0 :(得分:1)

我也看到了这个,在chrome 35.0.1916.114 m,但没有足够的评论点:) @ codefox421,我可以通过修改重新创建你的小提琴中的效果 routeViewB处理程序如下:

   routeViewB: function routeViewB() {
        this.navigate("xxx",{trigger:false,replace:true} );
        $('body>*').detach();
        $('body').append( app.viewB.$el );
    },

现在访问B后,点击后退将重新加载页面:(

我还在这里找到了一个非常类似问题的报告: https://github.com/BlueSpire/Durandal/issues/513

会喜欢解决方法/解决方法。 atm我很难过。

**我刚刚更新到最新的chrome,问题已解决。