簡體   English   中英

Backbone.js Pushstate路由和PHP框架的路由器

[英]Backbone.js Pushstate Routing and PHP Framework's Router

我正在將Backbone.js與PHP MVC框架(Codeigniter,Laravel)一起使用。 我對使用Pushstates時PHP路由器和Backbone路由器將如何處理URL感到困惑。 (我尚未開始使用pushstate,仍然使用hashbangs # )。 我不在單頁面應用程序上工作,而是該站點由幾個頁面組成,這些頁面本身就像單頁面應用程序一樣。

問題:如果我有一個頁面http://domain.com/user/user123 ,然后單擊鏈接http://domain.com/user/user123#photos通過AJAX加載了一些照片,而我想擺脫# ,我預見到以下問題http://domain.com/user/user123/photos在單擊鏈接后訪問http://domain.com/user/user123/photos的用戶決定將URL復制並粘貼到另一個瀏覽器標簽中時,將看到錯誤404頁面作為PHP框架路由器(如果我正確地假設PHP路由器在骨干網之前先處理了URL請求)無法識別該URL的存在。 該如何解決?

我認為將會出現的另一個問題是,當用戶直接訪問http://domain.com/user/user123/photos時,應如何呈現視圖? HTML代碼是否應該在PHP視圖(對於用戶直接輸入URL的實例)和ribs.js視圖(對於用戶單擊來自http://domain.com/user/user123的鏈接的情況)上均重復http://domain.com/user/user123 )? 這似乎不是我的最佳解決方案。 還是可以在兩種情況下都由主干以某種方式呈現View以避免重復代碼?

請指教 :)

您已經遇到了將pushState集成到骨干應用程序中更具挑戰性的方面之一。 基本上,您需要確保要鏈接到應用程序內的任何路由也可以由服務器處理。

在PHP中,解決此問題的最簡單方法是將所有對有效URL( /user/user123 )的請求路由到您的根頁面,然后讓主干調用與url片段相對應的處理程序。 這要求您在服務器端實際上知道有效的URL是什么(即/posts/5是有效的, /posts/abc/aaa/是無效的,等等),但是否則,這不是很多工作。

最終,問題在於您正在無狀態協議(HTTP)和有狀態的應用程序(backbone.js)之間切換。 這需要一些仔細的計划。

關於第二個問題,您不需要在服務器端呈現視圖,只需執行對根域請求的所有操作,並且/user/user123將觸發相應的處理程序(例如/user/user123 )。 您唯一想在服務器端實際呈現視圖的情況是,如果您要支持不使用JavaScript的用戶或使應用程序為RESTful,在這種情況下,您將不得不復制視圖代碼(沒有簡便的方法這個)。

希望有道理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM