Как я могу сказать, что модель не является новой?

У меня есть объект, который также сохраняется на сервере, и я создаю модель Backbone из этого объекта.

Но когда я сохраняю модель, она делает запрос PUT, чего я не хочу. Как сказать Магистраль, что данные уже находятся на сервере, не делая выборку?

Ответ 1

Магистральные определяет новизну модели с помощью проверки, если идентификатор установлен:

isNew model.isNew()

Сохранена ли эта модель на сервере? Если модель еще не имеет id, она считается новой.

И когда вы сохраняете модель,

  • если он новый, будет отправлен запрос POST,
  • Если это обновление (идентификатор установлен), будет отправлен запрос PUT

Документация по Backbone Sync


И как отмечено @JayC в комментариях:

Если есть вопрос о том, что идентификатор не может быть в буквальном смысле id, вы можете использовать idAttribute сказать, что является "личность" или ключевое поле.

Ответ 2

Добавляя мои два цента здесь, надеюсь, что это позволит избежать некоторых причесок, которые я должен был сделать.

Установка свойства id модели напрямую с помощью конструктора в false или null не приведет к трюку, вы должны фактически удалить его из памяти через delete

Например, я просто пытался копировать атрибуты из одного типа модели в другой тип в качестве новой модели:

copy = Trip.clone()
#doesn't unset the id attribute
schedule = new models.Schedule(_.extend(copy.attributes, {id:null, trip_id:id})
#does unset the id attribute
delete schedule.id
schedule.save null, success: =>
  # back from POST vs PUT   
  ...