2012-12-01 60 views
2

在我的應用程序中,用戶使用一堆模型創建一個集合。由於我不想向服務器發出大量請求,因此我創建了一個自定義函數,將這些模型批量保存到服務器。然後服務器以包括它們的id在內的所有模型作出響應,然後將其設置爲各種模型。迄今爲止所有的工作都很好骨幹模型同步狀態

我現在遇到的問題是Backbone不知道在這一點上所有模型都與服務器同步。因此,在應用程序的稍後時間,當我在每個模型上調用model.save()時,它會將每個模型再次發送到服務器(應該只是自批處理操作後更改的模型)。我怎麼能讓Backbone知道所有模型都同步?我正在看'變化'和'hasChanged'屬性,但我不太確定我是否應該操縱這些(我猜不是)。

回答

7

主幹不包括跟蹤自上次更改屬性以來的功能與服務器同步。

changedhasChanged未處理自上次與服務器同步以來已更改的屬性。

您必須創建自己的機制來跟蹤你的模型的狀態:

  1. 每個模型應該有一個hasChangedSinceLastSync標誌。
  2. 每個模型都應綁定(.on)它自己的change事件並將該標誌設置爲true。
  3. 覆蓋sync方法,並在從服務器返回數據(用於讀取/創建/更新)時將標誌設置爲false。
+0

您能否提供一個示例來說明如何實施步驟3? – Fdr

+1

下面是一個實現這個想法的完整模型:https://gist.github.com/berzniz/8010245 –

+1

該gist有一個錯誤:sync()應該返回:「return Backbone.sync(method,model,options); 「而不是「Backbone.sync(方法,模型,選項);」 – Fdr

0

如果您的模型的id屬性爲未設置/ null,則骨幹將創建HTTP POST以創建模型服務器端。

因此,您應該做的是在服務器返回它們時手動設置此id屬性。

此外,如果您的id屬性不是id,您可以告訴主幹這是另一個屬性。

CF,文檔: