骨干路由器,URL和测试/生产Web上下文

时间:2012-06-28 21:17:04

标签: backbone.js backbone-routing

在我的Backbone应用程序中,我有一个主视图,显示帖子的预览。当用户点击帖子时,帖子会在叠加层中展开,并且网址会更改以反映该帖子。在扩展帖子时,用户可能会执行一些操作,触发需要在根上下文中发生的服务器调用。问题是,当扩展帖子时,需要在根上下文发生的服务器调用发生在后置上下文中。这是操作的顺序:

  1. 页面已加载主视图网址: http:// localhost:8080 / my-web-app /
  2. 用户点击发布,重叠显示,网址更新为: http:// localhost:8080 / my-web-app / posts / 1
  3. 用户点击触发服务器调用的内容。网址是: http:// localhost:8080 / my-web-app / posts / 1 / load ,这是错误的。
  4. 在上面的示例中,加载操作需要从根上下文发生: 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";
    }
    

    虽然这种方法有效,但是屁股很难超越这样的每个网址功能......更不用说,它感觉很笨拙。它对于生产环境来说也是完全不必要的代码。是否有更优雅的方式来管理它,以便它在测试和生产环境中都有效?

    谢谢!

2 个答案:

答案 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>