Обновление элементов массива angularfire

Я использую метод angularfire $add для добавления базовых объектов js в форме {id:integer,name:name} Теперь, если я хочу обновить определенный элемент (который обычно имеет ключ, назначенный firebase, например "-JEcA_f70efHbKi5js7j" или что-то в этом роде , у меня сложилось впечатление, что я должен использовать метод $save Вот как я пытаюсь это сделать:

$scope.chosenColors = $firebase(myChosenColorsRef);


$scope.updateColor = function(data){ //data is a JS object like {id:'id',name:'name'}

    if($scope.chosenColors.$getIndex().length>0){
        var keys = $scope.chosenColors.$getIndex();
        keys.forEach(function(key, i) { 
            if($scope.chosenColors[key].id!=data.id){//if id matches I want to update name
                $scope.chosenColors[key] = {id:data.id,name:data.name}
                $scope.chosenColors.$save[key];
                return;
            }
        });
    }else{
        $scope.chosenColors.$add(data);         
    }

Но это, похоже, не влияет на базу огня... есть идеи, что я делаю неправильно?


person Byron Peterson    schedule 31.01.2014    source источник


Ответы (2)


Во-первых, вам следует вызвать метод $save, а не просто обращаться к нему с помощью ключа:

$scope.chosenColors.$save(key);

Во-вторых, вы перебираете все ключи, чтобы выяснить, какой из них вы хотите сохранить, что довольно неэффективно. Вы должны изменить свой аргумент updateColor, чтобы использовать key в качестве аргумента.

<div ng-repeat="(key, color) in chosenColors">
  <a ng-click="updateColor(key, color)">Update</a>
  ...
</div>

function updateColor(key, data) {
  $scope.chosenColors[key] = data;
  $scope.chosenColors.$save(key);
}
person Anant    schedule 31.01.2014

Спасибо за это. Я попробую... причина, по которой я перебираю все элементы, заключается в том, что я отвечаю на событие перетаскивания на элементе холста, и мне нужно знать, какой элемент перетаскивается... Я полагаю, что мог бы сохранить это как часть перетаскиваемого объекта и обращаться к нему напрямую .. детские шаги! С уважением,

person Byron Peterson    schedule 01.02.2014
comment
Я думаю, что это должен был быть комментарий, а не ответ. - person H.Wolper; 22.10.2014