Поле объекта становится нулевым при вставке angularjs

Я столкнулся со странной проблемой: когда я выполняю PUT с использованием angular $resource, поле для вновь добавленного объекта становится нулевым. Данные представляют собой набор вложенных объектов. Когда пользователь перетаскивает элемент списка в другой список, этот элемент помещается в связанный объект в данных, и пользователю предлагается добавить «Комментарии». После чего поле «Комментарий» обновляется корректно. Теперь, если пользователь нажимает кнопку «Сохранить», я выполняю PUT, чтобы обновить объект на бэкэнде. Когда страница обновляется, появляется новый добавленный объект, но его поле комментариев пустое. Я просмотрел данные непосредственно перед PUT, и поле «Комментарии» по-прежнему заполняется, как и ожидалось, но когда я просматриваю PUT XHR в Chrome, поле «Комментарии» пусто. Странно то, что при добавлении новых объектов, подобных этому, ряд полей, таких как поле «Комментарии», заполняется, но только поле «Комментарии» становится пустым. Я надеюсь, что кто-то может объяснить это мне. Вот пример кода:

Исходный объект до операции DnD:

myData = [
  {
    Field1: 'Data',
    Field2: 'Data',
    Comments: 'Data',
  }
  {
    // More objects like this
  }
]

После ДнД:

[
  {
    Field1: 'Data',
    Field2: 'Data',
    Comments: 'Data',
  },
  {
    // More objects like this
  },
  {
    Field1: 'Data',
    Field2: 'Data',
    Comments: 'New comments',
  }
]
MyService.http.update({
                    data1ID:myData.data1ID,
                    data2ID: myData.data2ID
                }, myData).$promise.then(function() { // Here the Comments field is still populated


                    myData.isDirty = false;
                };

В PUT XHR я вижу это после предварительного уточнения:

    [
{
 Field1: 'Data',
 Field2: 'Data',
 Comments: 'Data',
},
{
// More objects like this
},
{
 Field1: 'Data',
 Field2: 'Data',
 Comments: null, // What gives?
}
]

Вот мой вызов $resource:

angular.module('myApp').factory('MyDataService', function ($resource, $window) {

    return {

        http: $resource(myUsualURLForGETsANDPOSTs, {
            data1ID: '@data1ID',
            data2ID: '@data2ID',
            data3ID: '@data3ID'
        }, { //parameters default
            update: {
                url: myPUTURL,
                method: 'PUT'
            },
            get: {
                method: 'GET'
            },
            post: {
                method: 'POST'
            }
        })

    };
});

person Lazloman    schedule 27.02.2015    source источник


Ответы (1)


Я понял это. Я неправильно читал данные XHR в Chrome. Поле на самом деле не было нулевым, но действительно было заполнено ожидаемыми данными. Это были возвращаемые данные с пустым полем. Другими словами, у нас была проблема на бэкэнде, когда он не сохранял должным образом все отправляемые поля, а ответ на PUT был плохим.

person Lazloman    schedule 03.03.2015