骨干路由器和与Web服务器控制器的兼容性

时间:2012-04-13 08:02:41

标签: javascript url backbone.js

如何获得我的网络服务器控制器和Backbone路由器之间的兼容性? 我设置它是这样的,当用户点击链接,呈现视图,URL看起来像这样:/test/1,这就是我想要的。当用户通过将其输入地址栏来尝试访问test/1时,会出现此问题。我的后端有控制器,负责路由URL。

如何使用Backbone路由而不是后端路由?

一种有效的方法是访问网址#test/1。它是可收藏的,可以输入地址栏。问题是骨干条纹加载#。

所以,我看到了两个问题的解决方案:

  1. 让后端控制器与Backbone路由进行交互
  2. 在地址栏内输入#时,不要删除#。
  3. 建议使用以上哪种解决方案。而且,我将如何实现它们。第二个解决方案似乎更容易,但我怎么做到这样骨干不会剥离哈希的URL?

2 个答案:

答案 0 :(得分:2)

根据我的理解,当用户导航到根页面然后通过链接测试/ 1时,逻辑由主干处理并呈现视图。但是当用户直接导航到test / 1时,这不能正确处理。

要处理此问题,您需要在服务器上设置一条路径,将路由器处理的所有URL指向根页面。此逻辑取决于您未指定的服务器。要在ASP中执行类似的操作,您可以设置如下路径:

RouteTable.Routes.MapWebPageRoute("test/{id}", "~/Default.cshtml", new {}, new { id = "\\d+" });

这将导致诸如test / 1之类的URL由默认页面处理,该默认页面与用户导航到/时的处理程序相同。一旦页面加载到客户端上,Backbone路由器将为测试/ 1路由启动。

答案 1 :(得分:0)

嗯,实际上,您希望URL始终包含#的原因有很多。它使许多事情变得更好。例如,Web服务器会自动选择正确的控制器,无论您手动输入URL,使用书签,使用其他站点的链接,还是使用后端和前进按钮,都会自动向Backbone提供正确的路由。网页浏览器。所以选择2绝对是你想要的。这也是Backbone的标准行为。

所以我的问题是“你是如何在第一时间停止使用#?”

编辑:感谢Chris Herring为我们指出一篇解释why # is bad的精彩文章。有了这个,我将把它留给读者,让他们知道他们想要忍受哪种痛苦。我认为只要所有Backbone路由发生变化,#仍然是可行的方式,就是如何显示页面上的信息而不是页面上的信息。如果不支持JavaScript的网络抓取工具可以抓取所有相同的信息,无论#后面是什么,那么我仍然没有看到它的问题。