Я использую Backand для предоставления базы данных и REST api для моего приложения с угловыми углами.
Я работаю над возможностью редактирования пользователями сложного объекта, который затем должен быть обновлен в базе данных. достаточно Непосредственная ...
Объект выглядит как это:
obj = {
id: 1, // assigned by the db
name: "My List",
tasks: [
{ id: 1, desc: "Task 1" },
{ id: 2, desc: "Task 2" },
...
]
}
Для обновления ($ HTTP PUT) вызов, я хотел бы использовать params: { deep: true }
в качестве ярлыка для минимизации кода и $http
вызовов.
Проблема в том, что, хотя команда PUT обновляет «основной» объект в базе данных, отредактированные «дочерние» объекты не обновляются, а добавляются как новые дочерние объекты.
Например, если я пытаюсь обновить основные и дочерние объекты в одном вызове:
$http({
method: 'PUT',
url: baseUrl + 'lists/' + list.id,
params: {
deep: true
},
data: {
id: 1,
name: "My To Do List",
tasks: [
{ id: 1, desc: "New Description for Task 1" },
{ id: 2, desc: "New Description for Task 2" }
]
}
}).then(....);
база данных не обновления дочерние объекты, он добавляет их. Вот как полученный объект в базе данных:
list = {
id: 1,
name: "My To Do List", // Updated correctly
tasks: [
{ id: 1, desc: "Task 1" },
{ id: 2, desc: "Task 2" },
{ id: 3, desc: "New Description for task 1" }, // Added not updated
{ id: 4, desc: "New Description for task 2" } // Added not updated
]
}
Я убедился, что дочерние объекты id
s является правильным.
Есть ли способ сделать это лаконично, или я ушел в отставку, чтобы сделать это на нескольких этапах? Делает deep = true
даже работать с PUT? Backand docs не упоминает об этом.