2012-08-13 88 views
4

我一直面临着骨干网的路由这个问题,想我会花足够的时间调查:骨干导航到基础URL后立即页面加载

有在玩两个URL位置:/和/后/: ID。 /页面通过/ post /:id链接到各种帖子。当我点击帖子链接时,帖子页面会加载,但骨干网会立即将网址更改为/。这不仅看起来不好,还会在错误的时间触发路由处理程序。我没有做任何特别的...这里是我的代码:

PostRouter = Backbone.Router.extend({ 
     routes : { 
      "" : "doHome" 
     }, 
     initialize : function() { 

     }, 
     doHome : function() { 
        // do some stuff before navigating 
      window.location = "/"; 
     } 
}) 

... 

var router = new PostRouter(); 
Backbone.history.start({ pushState: Modernizr.history }); 

同样,在页面加载后立即调用doHome函数。显然这导致网站导航回到主页。我显然可以移除对window.location的调用以防止这种情况发生,但是url仍然会更新到根url,这是不可接受的。

在此先感谢!

更新1:

如果我直接去为 “localhost:808 /后/:id为” 链接立即更改为 “localhost:8080 /”。但是,如果我在私人浏览器窗口中执行完全相同的操作,则不会出现此行为。

更新2:

鉴于我在更新1中,我疯了,从头开始:我清除4周浏览历史记录(叹气),停在我的本地服务器,并清理所有持久会话并重新部署我的应用程序。唉,它的工作!也就是说,我没有列出这个解决方案,因为它无法解释究竟发生了什么以及如何解决它。另外,它让我担心我的网站用户会发生这种情况。我无法确定这种情况是否发生,即使我这样做了,我也无法告诉他们如何解决这个问题(清除浏览器历史4周不是一种选择!)。任何人都可以阐明可能发生的事情吗?

+0

您似乎没有为/ post /:id定义的路由。这是真的吗?或者只是在发布问题时发生错误? – 2012-08-13 19:03:08

+0

确实如此。/post /:id链接实际上是直接从/发布到帖子页面的硬链接。事实上,帖子页面是/ post /:id,所以它不需要处理路由。也许令人困惑的是,我在描述帖子url时使用了主干术语。 – threejeez 2012-08-13 19:11:21

+0

如果你没有用'var myRouter = new PostRouter()'来实例化'Router',那么就不会工作。我认为这不是问题的原因,但值得一提。 – fguillen 2012-08-13 19:58:59

回答

0

你为什么不尝试添加

console.log(Backbone.history.handlers); 

末看,你的溃败是如何加入到Backbone.history。这可能会带来一些启发。

+0

做到了这一点,并得到了我的预期。一条路线:/^$ / – threejeez 2012-08-14 21:15:32