2012-07-11 106 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