Обновление сложного пользовательского объекта REST Appcelerator
Все,
TL: DR
- Appcelerator Cloud Services
- ОСТАЛЬНОЕ
- Пользовательский объект с массивами
- Обновить свойство в массиве, используя атомарный оператор $ inc
Подробности:
Я использую AngularJS для доступа к облачным сервисам Appcelerator с помощью REST. У меня есть сложный пользовательский объект (см. Ссылки Gist ниже). Моя пользовательская коллекция будет содержать один из этих объектов на событие. У каждого события есть команды, и у каждой команды есть участники. Каждая команда и участник соревнуются в отдельных этапах, а зрители голосуют за результативность команды и участника. Я хочу обновить результаты команд и участников, но не могу понять, как мне нужно установить значение полей для обновления результатов.
Я создал суть со всеми своими файлами, которые связаны с этой проблемой. Если кто-нибудь может оказать помощь, я буду признателен.
2 ответа
Я сдался и изменил объект партитуры на плоский документ. Теперь у меня есть документ оценки для каждого события / команды / сегмента или события / участника / сегмента. Это должно позволить легко обновлять свойство оценки, поскольку в документе оценки теперь нет хэшей или массивов.
Пусть весь массив у вас будет называться 'arr';
var arr= {....};
Давайте разберемся с сегментами, расположенными 3-м ключом сверху. Тогда в вашем HTML это будет выглядеть примерно так:
<table>
<tr ng-repeat="segment in arr[0].segments">
<td ng-bind="segment.name"></td>
<td>
<input type="text" ng-model="segment.name">
</td>
<td ng-bind="segment.score"></td>
<td style='cursor:pointer;' ng-click="segment.score = segment.score+1">Add Score</td>
</tr>
</table>
И ваш контроллер будет что-то вроде:
var TodoCtrl = function ($scope) {
$scope.arr = arr;
}
Это просто массив объектов, поэтому думайте о нем как о массиве строк или чисел, но со свойствами. Например, если вы хотите вывести всех участников во второй массив, вы будете делать что-то вроде
arr[1].contestants.forEach(function(element, index, object){
console.log(element.id, element.name); // name would start with Gene Collier
element.segments.forEach(function(_el){
console.log('name', _el.name, 'score', _el.score);
});
}
Надеюсь, это поможет.