在我的 Backbone 应用程序中,我有一个显示帖子预览的主视图。当用户点击帖子时,帖子会在叠加层中展开,并且 URL 会更改以反映该帖子。当帖子展开时,用户可能会做一些事情来触发需要在根上下文中发生的对服务器的调用。问题是当帖子展开时,需要在根上下文发生的服务器调用发生在帖子上下文中。以下是操作顺序:
- 页面加载了主视图 url:http://localhost:8080/my-web-app/
- 用户点击post,显示overlay,url更新为:http://localhost:8080/my-web-app/posts/1
- 用户单击触发对服务器的调用的内容。网址为:http://localhost:8080/my-web-app/posts/1/load,这是错误的。
在上面的示例中,加载操作需要从根上下文发生:http://localhost:8080/my-web-app/load
我尝试更改我的模型、集合等的 url 属性以包含前导 /,但这会删除“/my-web-app/”上下文(url 变为http://localhost:8080/load) ,这在我的测试环境中是必需的。当然,这在生产环境中可以正常工作。
为了解决这个问题,我将 Backbone.history 根选项设置为“/my-web-app/”,并将每个 url 属性覆盖如下:
url: function() {
(Backbone.history.options.root != undefined ? Backbone.history.options.root : "") + "load";
}
虽然这种方法有效,但是像这样覆盖每个 url 函数是一件很痛苦的事情……更不用说,它感觉很hacky。对于生产环境,它也是完全不必要的代码。有没有更优雅的方法来管理它,以便它在测试和生产环境中都可以工作?
谢谢!