Поэтому я использую этот Rest API с ngResource для выполнения запросов get, query, post и update. Я ищу способ определить структуру для каждой сущности.
Например, предположим, что у нас есть:
module.factory('app.entity.item', function($resource) {
return $resource('http://xmpl.io/items/:itemId', { itemId: '@id' });
});
Я хочу создать экземпляр в контроллере, например:
module.controller('AddItemCtrl', ['app.entity.item', function(Item) {
$scope.item = new Item();
});
и привяжите его к соответствующей форме в моем шаблоне.
Фактическая проблема, с которой я столкнулся, заключается в том, что мне приходится иметь дело с таблицами 1:m. Примером структуры сущности может быть:
{
"name": "",
"categories": [],
"list": [
{
"value": "",
"list": [
{
"value": "",
"list": [
{
"value": ""
}
]
}
]
}
]
}
(более подробный пример в скрипте ниже)
Теперь первые два поля явно не проблема. Это третий. list
. Каждый из этих списков может иметь переменное количество элементов.
В настоящее время я использую ngRepeat и метод add(type, context)
, который добавляет новый набор полей в область (поле value
в этом примере и дочерние списки для первых двух уровней), которые будут отображаться в пользовательском интерфейсе с помощью ngRepeat, чтобы пользователь мог его заполнить. и отправьте в сервис.
Во-первых, я должен определить структуру, чтобы пользовательский интерфейс не был пустым при загрузке страницы.
module.controller('AddItemCtrl', ['app.entity.item', function(Item) {
$scope.item = new Item({
"name": "",
"categories": [],
"list": [
{
"value": "",
"list": [
{
"value": "",
"list": [
{
"value": ""
}
]
}
]
}
]
});
});
Но это лишнее. Я должен сделать это везде! Другая проблема заключается в том, что при вызове item.$save
модель очищается (возможно, повторно создается экземпляр?), а поля внутри свойства списка (управляемые директивой ngRepeat) исчезают.
Поэтому мне интересно, что бы вы сделали в таких обстоятельствах. Есть ли способ определить структуру объекта (ресурса)?
ПРИМЕР: http://jsfiddle.net/g15sqd5s/3/