在我的Backbone应用程序中,我有一个主视图,显示帖子的预览。当用户点击帖子时,帖子会在叠加层中展开,并且网址会更改以反映该帖子。在扩展帖子时,用户可能会执行一些操作,触发需要在根上下文中发生的服务器调用。问题是,当扩展帖子时,需要在根上下文发生的服务器调用发生在后置上下文中。这是操作的顺序:
在上面的示例中,加载操作需要从根上下文发生: http:// localhost:8080 / my-web-app / load
我尝试更改我的模型,集合等的url属性以包含一个前导/,但这会删除“/ my-web-app /”上下文(该网址变为 http:// localhost:8080 / load ),这在我的测试环境中是必需的。当然,这在生产环境中可以正常工作。
为了解决这个问题,我将Backbone.history根选项设置为“/ my-web-app /”并覆盖每个url属性,如下所示:
url: function() {
(Backbone.history.options.root != undefined ? Backbone.history.options.root : "") + "load";
}
虽然这种方法有效,但是屁股很难超越这样的每个网址功能......更不用说,它感觉很笨拙。它对于生产环境来说也是完全不必要的代码。是否有更优雅的方式来管理它,以便它在测试和生产环境中都有效?
谢谢!
答案 0 :(得分:1)
应用程序路由在开发环境和生产方面不应该有所不同。这总会带来麻烦。
假设您在本地主机上使用Apache服务器,您可以创建自己选择的虚拟主机,并在/my-web-app/
上提供/
。
首先,将域名添加到/ etc / hosts文件并将其指向127.0.0.1,如下所示:
127.0.0.1 mywebapphost
然后将虚拟主机添加到Apache vhosts.conf
<VirtualHost *:80>
DocumentRoot "/Users/someone/Sites/my-web-app/" # absolute directory of your webapp
ServerName mywebapphost
</VirtualHost>
你已经完成了!您的webapp可在// mywebapphost:8080上找到,所有路由都与您的生产环境相同。
答案 1 :(得分:0)
我遇到了问题,经过一段时间的压力意识到你可以使用*作为你的路线的前缀来消除网络环境的问题:
*posts/1/load
唯一的缺点是路线分辨率需要做更多的工作,但鉴于它是客户端,它应该可以忽略不计。
虽然你的路由在dev,qa生产之间不应该有所不同,但我认为可以说很多web应用程序都被编写为与上下文无关,所以客户端的东西应该跟随imho。 / p>