1

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

我的路线如下所示:

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

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

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

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

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

http://mysite.com/subdir/

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

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

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

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

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

4

1 回答 1

1

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

于 2013-07-01T18:03:53.220 回答