Backbone.js Pushstate路由和PHP框架';s路由器


Backbone.js Pushstate Routing and PHP Framework's Router

我正在使用Backbone.js和PHP MVC框架(Codeigner,Laravel)。当使用Pushstates时,PHP路由器和主干路由器将如何处理URL,我对此感到困惑。(我还没有开始使用pushstate,仍然使用hashbangs #)。我不是在处理一个单页应用程序,而是这个网站由几个页面组成,这些页面本身就像单页应用。

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

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

请告知:)

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

在PHP中,解决这个问题的最简单方法是将所有对有效url(/user/user123)的请求路由到根页面,然后让主干调用与url片段相对应的处理程序。这需要服务器端的用户真正知道什么是有效的URL(即/posts/5有效,/posts/abc/aaa/无效,等等),但除此之外,这并不是一项巨大的工作。

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

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

希望这是有道理的。