2014-02-15 4 views
0

просмотр коллекции (списка) извлекает разреженный массив (не все поля модели) и создает коллекцию моделей, использующих только имя и идентификатор. начиная сbackbone fetch на модели с разреженным массивом и повторной выборкой на той же модели

collection.fetch(); //fetch requesting only partial json fields 

Коллекция выборки вызовов collection.parse и соответствующие model.parse() для каждой модели в коллекции.

все хорошо там.

затем повторная выборка на одной из моделей в коллекции - выполняется для одного вида модели. на этот раз запрашивая все поля. название, название, описание и т. д.

model.fetch({success: function(view) {console.log("yeah");}); //fetch requesting all json fields 

сервер бэкэнд-сервера показывает запрос и предоставленный ответ.

пульт показывает «да». Другими словами, выборка модели достигается всеми мерами. Однако на этот раз model.parse не вызывается. поэтому новые поля недоступны.

любые намеки на то, чтобы почему model.parse не называется, несмотря на Ajax «успех»

дальше, обработчик магистральная done показывает правильный JSON в responses.text

// Callback for when everything is done 
     function done(status, nativeStatusText, responses, headers) { 
      var isSuccess, success, error, response, modified, 
       statusText = nativeStatusText; 

Вы столкнулись с аналогичной проблемой: fetch с установленным идентификатором модели, выборка на модели должна возвращать json в объекте {} not array [{}]. и т. д. нет лучших практик thnx

ответ

0

Исходный код Backbone.js сравнительно легко понять, и вы можете отлаживать проблемы, подобные этому непосредственно внутри Backbone.

Что происходит, когда вы звоните model.fetch в основном следующие:

  1. Ваш успех при условии обратного вызова сохраняется для последующего использования и заменен на новый успех обратного вызова.
  2. model.sync вызывается с текущей моделью и предоставленными опциями (за исключением того, что параметры теперь имеют другой обратный вызов).
  3. model.sync в конечном итоге вызывает обратный вызов успеха.
  4. Успешные обратные вызовы model.parse (Это может быть точка, в которой что-то пошло не так).
  5. Результат model.parse.
  6. Вызов вашего первоначального обратного вызова.

Установив точку останова на ваш вызов и опустившись в исходный источник, вы должны выяснить, что не так. Несколько вещей, которые необходимо проверить во время отладки:

  • Есть model.parse Функция, которую вы ожидаете от этого?
  • Действительно ли model объект, которого вы ожидаете от этого?

Если это не поможет, попробуйте создать пример меньшего кода, удалив несвязанный код, который воспроизводит проблему. Делая это, вы должны в какой-то момент понять, что происходит не так.

И если это все еще не работает, создайте JSFiddle с примером небольшого кода, создайте макетную копию с http://www.mockable.io/ и разместите ее здесь еще раз.

Смежные вопросы