0

我正在使用 Backbone.js 和 PHP MVC 框架(Codeigniter、Laravel)。我对使用 Pushstates 时 PHP 路由器和 Backbone 路由器如何处理 URL 感到困惑。(我还没有开始使用 pushstates,还在使用 hashbangs #)。我不是在处理单页应用程序,而是该站点由几个页面组成,这些页面本身就像单页应用程序一样。

问题:如果我有一个页面http://domain.com/user/user123,并且单击一个链接http://domain.com/user/user123#photos通过 AJAX 加载了一些照片并且我想摆脱,我预见到单击链接后#转到的用户决定将 URL 复制并粘贴到另一个的问题http://domain.com/user/user123/photos浏览器选项卡将看到一个错误 404 页面,因为 PHP 框架路由器(如果我正确假设 PHP 路由器在主干之前首先处理 URL 请求)无法识别此 URL 的存在。这个问题应该如何解决?

我认为会出现的另一个问题是,当用户直接进入时,视图应该如何呈现http://domain.com/user/user123/photos?HTML 代码是否应该在 PHP 视图(对于用户直接输入 URL 的情况)和主干.js 视图(对于用户单击链接的情况)上重复http://domain.com/user/user123?这对我来说似乎不是最佳解决方案。或者是否可以通过主干在两种情况下以某种方式呈现视图以避免重复代码?

请指教 :)

4

1 回答 1

3

pushState您已经遇到了整合到主干应用程序中更具挑战性的方面之一。基本上,您需要确保在您的应用程序中链接到的任何路由也可以由服务器处理。

在 PHP 中,解决这个问题的最简单方法是将所有对有效 URL ( ) 的请求路由/user/user123到您的根页面,然后让骨干网调用对应于 url 片段的处理程序。这要求您在服务器端实际知道有效 URL 是什么(即/posts/5有效/posts/abc或无效/aaa/等),但除此之外它不是大量工作。

最终的问题是您在无状态协议 (HTTP) 和有状态应用程序 (backbone.js) 之间切换。这需要一些仔细的计划。

关于您的第二个问题,您不需要在服务器端呈现视图,只需执行您对根域的请求所做的一切,backbone.js 将触发适当的处理程序(例如/user/user123)。您想要在服务器端实际呈现视图的唯一情况是,如果您想支持没有 javascript 的用户,或者让您的应用程序 RESTful,在这种情况下您将不得不复制视图代码(没有简单的方法这)。

希望这是有道理的。

于 2012-07-31T02:35:56.220 回答