Я столкнулся со странной проблемой: когда я выполняю 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'
}
})
};
});