Backbone.js 主干在页面加载后立即导航到基本URL

Backbone.js 主干在页面加载后立即导航到基本URL,backbone.js,backbone-routing,Backbone.js,Backbone Routing,我一直面临主干路由的问题,我想我已经花了足够的时间调查: 这里有两个url:/and/post/:id。通过/post/:id,/页面有到各种帖子的链接。当我单击帖子链接时,帖子页面会加载,但主干会立即将url更改为/。这不仅看起来很糟糕,还会在错误的时间触发路由处理程序。我没有做什么特别的事。。。这是我的密码: PostRouter = Backbone.Router.extend({ routes : { "" : "doHome" }

我一直面临主干路由的问题,我想我已经花了足够的时间调查:

这里有两个url:/and/post/:id。通过/post/:id,/页面有到各种帖子的链接。当我单击帖子链接时,帖子页面会加载,但主干会立即将url更改为/。这不仅看起来很糟糕,还会在错误的时间触发路由处理程序。我没有做什么特别的事。。。这是我的密码:

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 });
同样,在加载post页面后立即调用doHome函数。显然,这会导致站点导航回主页。显然,我可以删除对window.location的调用以防止出现这种情况,但url仍然会更新为根url,这是不可接受的

提前谢谢

更新1:

如果我直接转到“localhost:808/post/:id”,url会立即更改为“localhost:8080/”。然而,若我在私有浏览器窗口中执行完全相同的操作,则不会观察到这种行为

更新2:


根据我在更新1中发现的情况,我发疯了,从头开始:我清除了4周的浏览历史记录(叹气),停止了本地服务器,清理了所有持久会话,并重新部署了我的应用程序。唉,成功了!这就是说,我并没有将此列为解决方案,因为它无助于解释到底发生了什么以及如何解决它。此外,它让我担心这种情况发生在我网站的用户身上。我没有办法告诉他们这是怎么回事,即使我告诉了他们,我也无法告诉他们如何解决这一问题(清除4周的浏览器历史记录是不可能的!)。有人能解释一下可能发生了什么吗?

你为什么不试着补充一下

console.log(Backbone.history.handlers);

最后,查看您的路由是如何添加到Backbone.history的。这可能会有所启发。

您似乎没有为/post/:id定义路由。这是真的吗,还是仅仅是发布问题时的错误?确实如此。/post/:id链接实际上是直接从/到post页面的硬链接。事实上,post页面是/post/:id,因此它不需要处理路由。可能混淆之处在于,我在描述post url时使用了主干命名法。
Router
如果您没有使用
var myRouter=new postrower()
对其进行实例化,它将无法工作。我不认为这是问题的原因,但值得一提。它在…;)中被实例化。我将把它添加到上面的代码中。我认为您应该修复代码示例,因为在我看来,它将重现一个递归行为,因为您在
/
中启动应用程序,
doHome
处理程序将通过
窗口再次将页面重定向到
/
。location
。这样做了,并且得到了我所期望的结果。一条路线:/^$/