1

如何在我的 Web 服务器的控制器和 Backbone 路由器之间获得兼容性?我已经设置了它,所以当用户单击链接时,会呈现一个视图,并且 URL 看起来像这样:/test/1,这就是我想要的。当用户尝试test/1通过将其输入地址栏中进行访问时,就会出现问题。我的后端有负责路由 URL 的控制器。

我将如何获得它以便它使用主干路由而不是后端路由?

一种有效的方法是当我访问 url 时#test/1。它是可收藏的,可以输入到地址栏中。问题是主干在加载时会带上#。

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

  1. 让后端控制器与 Backbone 路由交互
  2. 使其在地址栏中输入时不会删除#。

推荐上述哪种解决方案。而且,我将如何实施它们。第二种解决方案似乎更容易,但我将如何使其主干不会剥离散列的 URL?

4

2 回答 2

2

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

要处理这个问题,您需要在服务器上设置一个路由,将骨干网处理的任何 URL 指向根页面。其逻辑取决于您未指定的服务器。要在 ASP 中做这样的事情,你可以设置这样的路由:

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

这将导致诸如 test/1 之类的 URL 由默认页面处理,该默认页面与用户导航到 / 的处理程序相同。一旦页面加载到客户端,Backbone 路由器就会触发 test/1 路由。

于 2012-04-16T04:06:52.747 回答
0

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

所以我的问题是“你是如何让骨干首先停止使用 # 的?”

编辑:感谢 Chris Herring 为我们指出了一篇很好的文章,解释了为什么 # 是坏的。有了这个,我将把它作为练习留给读者,让他们了解他们想要忍受什么样的痛苦。我认为 # 仍然是要走的路,只要所有 Backbone 路由都在改变是页面上的信息是如何显示的,而不是页面上的信息是什么。如果不支持 JavaScript 的网络爬虫可以抓取所有相同的信息,而不管 # 后面是什么,那么我仍然看不到它有问题。

于 2012-04-19T04:59:36.680 回答