2011-12-05 78 views
4

我試圖建立使用Backbone.js的一個移動應用程序,將:Backbone.js的本地存儲,從服務器負載前期

  1. 加載在其第一次運行
  2. 從服務器項目列表這些承諾對本地存儲(我使用的骨幹網localstorage.js)
  3. 能夠保存列表項爲收藏,在本地存儲中保存此

該應用程序將永遠不會提交數據的變化服務器,但只能工作與本地存儲。

我正從服務器手動加載數據並填充集合,這一切都正常工作,但我無法將數據傳輸到本地存儲。

我正在撞牆試圖讓這個工作。任何想法如何解決這個是高度讚賞。我見過的所有例子都提交給服務器,或者是純粹的本地存儲。

回答

5

一個小例子代碼會很有用。

我不確定你是如何在第一次運行時從服務器加載項目列表的,如果你已經獲得本地存儲器的工作,但是,這是我可能把它放在一起的方式。

最簡單的方法是在應用程序運行期間,如果您從不需要返回服務器刷新任何模型,則只需從嵌入在應用程序中的服務器提供模型,然後在您創建您的收藏:

foo = new MyCollection(myJSONthatContainsAllTheModels) 

欲瞭解更多信息,請參閱骨幹文檔Bootstrapping

如果需要,在應用程序的運行過程中,從服務器定期刷新,然後..

使用骨幹,localStorage的是,有一個變化。這意味着它會覆蓋同步方法和任何正常的「獲取」,「保存」等功能將操縱本地存儲。改變的方法是在將Backbone.Sync替換爲LocalStorage版本之前,將原始Backbone.Sync複製到名爲Backbone.ServerSync之類的新函數中。這保留了REST同步。

然後,我會用一個新的函數來擴展Backbone.Collection,它使用Backbone.ServerSync函數從服務器獲取數據。

它看起來不像backbone-localstorage干擾集合的URL屬性,所以你應該可以很容易地做到這一點。

爲了清楚起見,稱爲serverfetch的這個新的集合函數或多或少是fetch的克隆,但是使用Backbone.ServerSync方法而不是Backbone.Sync。

從服務器獲取響應並解析它之後,它會爲每個應將它們提交到本地存儲的模型調用add。

+1

非常感謝Edward!你讓我走上正軌。我確實按照你的建議實施了它,它很有魅力。然而,我卻沒有選擇從服務器引導初始負載。因爲只有當數據不在本地存儲中時纔會發生這種情況,所以似乎沒有必要始終用胖的JSON對象來減少頁面的大小。 –

+1

非常好!很高興聽到它解決。 –

+0

我是Backbone的初學者,很長時間以來一直在尋找這個解決方案,但是任何一個人都可以在jsfiddle上提供示例示例 - 從服務器獲取數據並將其存儲在本地存儲中 –