我刚刚完成了我的第一个 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 添加了重复的文件夹名称。我刚刚删除了它,一切都按预期工作。