Backbone router.navigate没有重定向

时间:2015-03-15 00:06:14

标签: javascript backbone.js backbone-routing

老实说,我觉得这个问题有点愚蠢,因为这应该是一件非常简单的事情...... 在我的app init中,我有:

window.myApp =
  Models: {}
  Collections: {}
  Views: {}
  Routers: {}
  initialize: ->
    window.router = new Backbone.Router

    Backbone.history.start(pushState: true)

然后在我的视图中,当我点击一个按钮时,我会这样做:

router.navigate('/profile')

我也试过

router.navigate('/profile', true)

现在......我知道这不是使用骨干路由的最佳方式,但我需要我的rails应用程序管理路由,而我只使用骨干路由来获取路由历史... 如果我执行window.href ='/ profile',它会正确重定向。

我对骨干路线做错了什么?我以前用这种方式,但我不知道为什么它现在不再起作用了。

编辑:新网址始终在导航栏中正确显示,但不会重定向到新网页...仅在导航栏中显示新网址。

2 个答案:

答案 0 :(得分:4)

  

Backbone router.navigate没有重定向

不,它没有。这不是router.navigate甚至 的内容。它与重定向无关,而是用于更新地址栏。

  

新网址始终在导航栏中正确显示,但不会重定向到新网页...只会在导航栏中显示新网址。

是的,完全记录了router.navigate要做的事情。这是它的明确目的。您可以使用它来更新网址以反映网页的当前状态,将网页重定向到其他位置。

如果您想重定向到新页面,则应该使用window.location.href = '/profile'

如果您想更新地址栏然后触发新一轮的Backbone路由,请使用router.navigate('/profile', { trigger: true });,但同样,那不是Backbone的工作方式。

答案 1 :(得分:0)

我们遇到了这个问题,并发现有时甚至 window.location.href 也无效。

我们很幸运地发现了这篇文章Backbone: Refresh the same route path for twice,我们实际上只能使用所提出的解决方案的组合来使其工作:

  1. 导航到不存在的路线:Backbone.history.navigate('xpto');

  2. 然后使用:window.location.href = location;