2012-07-11 107 views
14

我有一些代碼,我想要一個NoteCollectionView添加NoteCollection的新註釋。這是通過在NoteCollectionView功能newNote觸發:Backbone:將模型添加到集合視圖中的集合?

newNote: function(data) { 
    var note = new Note(data); 
    this.collection.add(note); 
}, 

我還是很新的支柱,我希望確保這個同步與服務器。我所擔心的是:

1)簡單地將此註釋添加到集合會觸發服務器的save(),並使用服務器提供的ID更新模型?或者,

2)如果服務器沒有更新我的模型並給我一個實際的ID,我該如何使用note.save()保存模型並從服務器取回一個ID?

回答

33

要解決你的第一個問題,不,.add不會觸發任何形式的服務器的呼叫;它只會將模型添加到集合中。

但是,您確實有幾個選項。一個是創建新注模型,將它保存到數據庫中,然後將其添加到集合:

newNote: function(data) { 
    var note = new Note(data); 
    note.save(); 
    this.collection.add(note); 
} 

第二個選擇是簡單地使用Backbone's collection.create method。給它的屬性的哈希值,它會

  1. 保存它創建模型
  2. 到數據庫
  3. 將它添加到集合

所有一舉,像這樣:

newNote: function(data) { 
    return this.collection.create(data); 
} 

collection.create也返回新創建的模型,由我上面的return語句說明。

+0

謝謝,很好的回答!那麼,我的servlet應該採用哪些參數,並且應該在響應中將新模型寫入返回的JSON? – theeggman85 2012-07-11 19:08:17

+1

'collection.create'使用'model.save',所以假設你的模型正確地保存到數據庫中,不需要進一步的修改。通常,在保存並將它們設置爲Backbone模型後,我傾向於將模型的屬性返回爲JSON;這使我可以靈活地在保存操作期間修改某些屬性,並且在保存完成 – jackwanders 2012-07-11 20:22:07

+0

創建將很好地工作後,Backbone模型的數據將反映這些更改 - 是否有我們可以通過的選項來防止它保存到數據庫? – 2015-07-27 22:51:36