Как я могу сказать, что модель не является новой?
У меня есть объект, который также сохраняется на сервере, и я создаю модель 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
...