Магистраль: добавление модели в коллекцию из представления коллекции?

У меня есть код, где я хочу, чтобы NoteCollectionView добавлял новое примечание к NoteCollection. Это вызвано функцией newNote в NoteCollectionView:

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

Я все еще очень новичок в магистрали, и я хочу убедиться, что это синхронизируется с сервером. У меня есть проблемы:

1) Будет ли просто добавление этой заметки в сборку запускать save() с сервера и обновить модель с идентификатором, который сервер дает? Или,

2) Если сервер не обновляет мою модель и не дает мне фактический идентификатор, как мне сохранить модель с помощью note.save() и вернуть идентификатор с сервера?

Ответы

Ответ 1

Чтобы ответить на ваш первый вопрос, no, .add не вызовет никакого вызова на сервер; он добавит только модель в коллекцию.

Однако у вас есть пара вариантов. Можно было бы создать новую модель заметок, сохранить ее в базе данных и затем добавить ее в коллекцию:

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

Второй вариант состоит в том, чтобы просто использовать Backbone collection.create method. Дайте ему хэш атрибутов, и он будет

  • Создайте модель
  • Сохранить его в базе данных
  • Добавьте его в коллекцию

Все одним махом, вот так:

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

collection.create также возвращает вновь созданную модель, проиллюстрированную приведенным выше оператором return.