17

我有一些代码,我希望 NoteCollectionView 向 NoteCollection 添加新的注释。这是由 NoteCollectionView 中的函数 newNote 触发的:

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

我对骨干网还是很陌生,我想确保它与服务器同步。我的担忧是:

1) 简单地将这个注释添加到集合中会触发服务器的 save(),并使用服务器提供的 ID 更新模型吗?或者,

2)如果服务器没有更新我的模型并给我一个实际的ID,我如何使用note.save()保存模型并从服务器取回一个ID?

4

1 回答 1

37

为了解决您的第一个问题,不,.add不会触发对服务器的任何类型的调用;它只会将模型添加到集合中。

但是,您确实有几个选择。一种是创建新的笔记模型,将其保存到数据库中,然后将其添加到集合中:

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

第二种选择是简单地使用Backbone 的 collection.create 方法。给它一个属性哈希,它会

  1. 创建模型
  2. 将其保存到数据库
  3. 将其添加到集合中

一气之下,像这样:

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

collection.create还返回新创建的模型,如我上面的 return 语句所示。

于 2012-07-11T18:16:41.413 回答