【问题标题】:Backbone Routers, URLs and Test/Production Web Contexts骨干路由器、URL 和测试/生产 Web 上下文
【发布时间】:2012-06-28 21:17:04
【问题描述】:

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

  1. 页面加载了主视图 url:http://localhost:8080/my-web-app/
  2. 用户点击帖子,显示叠加,url更新为:http://localhost:8080/my-web-app/posts/1
  3. 用户单击触发服务器调用的内容。网址是: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。对于生产环境,它也是完全不需要的代码。有没有更优雅的方法来管理它,使其在测试和生产环境中都可以工作?

谢谢!

【问题讨论】:

    标签: backbone.js backbone-routing


    【解决方案1】:

    应用程序路由不应在开发环境和生产环境中有所不同。这总会在某个时候带来麻烦。

    假设您在 localhost 上使用 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 上可用,并且所有路由都与您的生产环境相同。

    【讨论】:

    • 我考虑过这个......它肯定会解决问题。我没有这样做的原因是因为理论上我可以使用同一台服务器测试两个 webapps。在那种情况下,它是行不通的。也就是说,我现在只测试一个 web 应用程序,所以我会试一试。顺便说一句,我使用的是 tomcat ......虽然同样的概念也适用!
    • 您可以为另一个 Web 应用添加另一个虚拟主机,这样您就可以在一台服务器上测试多个 Web 应用(但使用不同的虚拟主机)
    • 正确,但只有一个可以位于根目录(“/”)。所以理论上,所有其他 web 应用程序的 javascript 都会遇到与上下文路径相同的问题。我确实对我的 tomcat 配置进行了同义更改,并且一切正常。感谢您的建议!
    【解决方案2】:

    我遇到了这个问题,在强调了一段时间后意识到您可以使用 * 作为路由的前缀来消除 Web 上下文的问题:

    *posts/1/load
    

    唯一的缺点是路由解析需要做更多的工作,但考虑到它是客户端,它应该可以忽略不计。

    虽然您的路线在 dev、qa 生产之间可能不应该有所不同,但我认为可以公平地说,许多 Web 应用程序被编写为与上下文无关,因此客户端的东西应该效仿恕我直言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      相关资源
      最近更新 更多