【问题标题】:Backbone Router root duplicates in the url主干路由器根在 url 中重复
【发布时间】:2013-07-01 17:53:37
【问题描述】:

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

我的路线如下所示:

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

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

我虽然将 root 参数添加到主干历史记录中可以解决问题,所以我添加它是这样的:

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

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

http://mysite.com/subdir/

它加载应用程序并将其更改为:

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

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

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

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

【问题讨论】:

  • 你能分享你的确切代码(带有回调)吗?我刚刚在子目录中创建了一个路由器,它工作得很好。
  • “当我从子文件夹提供它时它没有”还有什么问题?
  • 问题出在我的代码中的其他地方,我正在调用 router.navigate('/subdir/') 并且它被添加到 url,使得 subdir 名称重复。删除这使得技巧,它现在可以工作了。

标签: javascript backbone.js


【解决方案1】:

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

【讨论】:

  • 我遇到了同样的问题,它仍然重复文件夹名称,但它使用主题标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多