У меня есть приложение Backbone, в котором я создаю новую модель и сохраняю ее. Вот фрагмент кода с отладкой в CoffeeScript:
newListing = new Listing
console.log "New?", newListing.isNew()
newListing.save creation, {
wait: true
success: (model, response) =>
console.log "SAVED", model
console.log "RESPONSE", response
}
Для отладки я также переопределил Backbone.sync
:
oldSync = Backbone.sync
Backbone.sync = (method, model) ->
console.log "Syncing:", method, model
oldSync(arguments...)
Обычно это работает нормально. Я получаю это в консоли:
New? true
Syncing: create > Listing
SAVED > Listing
RESPONSE > Object
А в инспекторе сетей я вижу:
listings POST 200 application/json
Я также вижу POST-запрос, зарегистрированный в моем журнале приложения (Rails).
Однако после создания нескольких листингов я начинаю видеть следующее поведение на консоли:
New? true
Syncing: create > Listing
SAVED > Listing
RESPONSE [> Object, > Object, > Object, > Object, > Object, > Object]
, где каждый Object
- это Листинг, уже сохраненный в базе данных. Инспектор сети и журнал моего приложения также указывают, что Backbone выполнил запрос GET для / lists. Кроме того, Listing
в третьей строке, которая была «SAVED», является представлением листинга на стороне клиента (без каких-либо дополнительных подробностей, которые обычно вставляет сервер).
Мне не удалось найти какой-либо образец этого поведения; иногда Backbone настаивает на отправке GET после GET, и после обновления он начинает работать. Иногда это работает до тех пор, пока я не перезапущу свой сервер приложений. Рад изучить любые предложения!
[Изменить]
Хорошо, после некоторого слежения, кажется, что после того, как я позвонил fetch()
на Listings
коллекции, Listing#save()
начинает это делать. Эта проблема появляется только на моем ноутбуке, который работает под управлением Chrome Dev (v19). В других браузерах и более старых версиях Chrome работает нормально.