Backbone Router root在url中重复

时间:2013-07-01 17:53:37

标签: javascript backbone.js

我刚刚完成了我的第一个Backbone应用程序的开发,我发现了一个与路由器的小怪癖,我似乎无法修复。

我的路线看起来像这样:

routes: {
  '': 'index',
  'jobs/:id': 'viewJob',
  '*default': 'notFound'
}

从服务器根目录提供应用程序时它可以正常工作,但是当我从子文件夹提供它时它不会。在这种情况下,我总是得到默认路线。

我虽然将 root param添加到主干历史记录中就可以了,所以我这样添加了它:

Backbone.history.start({ pushState: true, root: '/subdir/' });

有了这个应用程序似乎按预期加载,但路由器会自动将 root 添加到所有路由,并最终被复制,所以当我第一次访问该网站时:

http://mysite.com/subdir/

加载应用并将其更改为:

http://mysite.com/subdir/subdir/

这使得应用程序在重新加载页面或使用浏览器后退按钮时会中断,因为该路由确实不存在。

避免这种情况的方法是什么?我不想对路由中的文件夹名称进行硬编码,因为它可能会更改或从根目录提供。

更新:我刚刚意识到我在我的代码中使用router.navigate自己添加了重复的文件夹名称。我刚删除它,一切都按预期工作。

1 个答案:

答案 0 :(得分:1)

只是一个小猜测..你真的想要打开pushState吗?如果服务器未设置为在新目录之外提供服务,则可能会导致重新加载问题。