【发布时间】: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 名称重复。删除这使得技巧,它现在可以工作了。