3

可能重複:
Reusing backbone views/routes on the server when using Backbone.js pushstate for seo/bookmarking最好的方法處理JavaScript渲染與服務器端模板

我使用Backbone.js的和一堆其他模塊的處理單頁App方法。我的目標:

  1. 該網站必須是搜索引擎友好的

  2. 服務器引導HTML代碼到客戶端,並存儲在JSON模型的數據。

  3. 子序列動作全部由Javascript處理(例如渲染新屏幕,使用Backbone路由器更改網址)。

我的問題是如何構建服務器上的每個路由器網址使用JavaScript來調整和保持

例如:如果用戶去wwww.mysite.com,然後點擊一些鏈接去www.mysite.com/page/2,它必須是一樣讓他去www.mysite.com/page/2直接在第一負載。

這似乎是一個古老的話題,但我無法找到任何有關在服務器端處理此問題的最佳方法的固定資源,而無需在Javascript中重複使用模板代碼。

我在想的一個選擇是將後端分割成Node.js和另一個服務器來處理API。 Node.js服務器以某種方式共享模板構建代碼作爲Javascript前端

無論如何,如果這不是正確的地方提出這樣的問題,那麼就愛聽聽一些建議和道歉。

+0

Socket.io是一個有趣的想法。我必須在那裏做更多的研究。但在hashbang上,我從我的專家朋友那裏得到很多建議,以避開hashbang並堅持pushState。我也更喜歡pushState,而Twitter似乎離開它http://news.ycombinator.com/item?id=3614037 –

回答

1

我會將我的節點服務器視爲我的數據的REST接口。然後,我會處理客戶端的所有其他事情:我可以使用require.js加載模板,並使用jade等模板插件,使用Backbone.Router完成所有路由,然後使用Backbone.sync方法訪問我的模型和集合(如collection.fetch())。

因此,例如,當用戶訪問「mysite.com/#page/2」時,我可以讓我的Backbone路由器加載並顯示頁面上的任何模板。如果我碰巧需要在該頁面上顯示的產品列表,那麼我可以讓我的product集合執行product.fetch()。這會向「/ products」發送GET請求 - 或者在product.url中指定的任何URL。然後,我的節點服務器會響應我的集合所屬視圖可用於呈現自身的一系列產品對象。

+0

所以jade是node.js的後端模板。假設我們有一個列表和一個按鈕來添加項目。我使用默認的項目列表加載頁面,然後使用JavaScript前端即時添加新項目。我可以通過POST來更新後端,但是在前端,我仍然設法爲每個項目添加每個項目的模板。當用戶直接進入列表頁面時,這部分前端模板管理代碼將與後端部分一起復制。當然這是一個簡單的例子,但希望你看到我的擔憂。 –

+0

如果您使用requirejs插件,可以使用Jade在前端生成模板(查看我爲該插件發佈的鏈接)。 – theabraham

相關問題