[英]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.