私は2つの配列を持っています:
$scope.grid.data and $scope.grid.backup
次のスクリプトを使用して、一度に 1 つの要素のデータを比較します。
for (var i = 0, len = $scope.grid.data.length; i < len; i++) {
if (!angular.equals($scope.grid.data[i], $scope.grid.backup[i])) {
var rowData = $scope.grid.data[i]
var idColumn = $scope.entityType.toLowerCase() + 'Id';
var entityId = rowData[idColumn];
entityService.putEntity($scope.entityType, entityId, $scope.grid.data[i])
.then(function (result) {
angular.copy(result, $scope.grid.data[i]);
angular.copy(result, $scope.grid.backup[i]);
}, function (result) {
alert("Error: " + result);
})
}
}
データベースを更新するには、次のようにします。
putEntity: function (entityType, entityId, entity) {
var deferred = $q.defer();
EntityResource.putEntity({ entityType: entityType, entityId: entityId }, entity,
function (resp) {
deferred.resolve(resp);
}, function (resp) {
deferred.reject('Error updating');
});
return deferred.promise;
}
このスクリプトは、変更を正しく認識し、データベースを更新します。
ただし、putEntity が結果を返し、その結果を $scope.grid.data[i] および $scope.grid.backup[i] にコピーしようとすると問題が発生します。
これは後で発生し、これを行おうとすると、常に要素 11 に配置しようとします。
putEntity から返されたデータが grid.data および grid.backup 配列の正しい要素にコピーされるようにする方法を知っている人はいますか?