Backbone.js, выдающий запросы GET для вызовов `model.save ()` - PullRequest
4 голосов
/ 18 марта 2012

У меня есть приложение 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 работает нормально.

1 Ответ

0 голосов
/ 24 апреля 2012

Очевидно, что это проблема конкретного приложения. Я думаю, что проблема на стороне сервера. Возможно, ваш серверный код возвращает все листинги после создания, а не только тот, который был создан. При успешном создании ваш сервер должен ответить 200 OK, и представление созданного объекта в теле ответа.

...