Comment faire que angularfire envoie ng-grid onBlur à la base de firebase automatiquement?

Il s'agit d'une question de suivi à partir d'ici: comment créer une liaison de données à 3 voies entre angularFire 0.5.0 et la dernière ng-grid? Où Kato a bien fourni une solution:

var app = angular.module('app', ['firebase', 'ngGrid']); var fb = new Firebase('https://nggrid-example.firebaseio-demo.com/'); app.controller('ctrl', function($firebase, $scope, orderByPriorityFilter) { $scope.data = $firebase(fb); $scope.myData = $firebase(fb); $scope.$watchCollection('data', function() { $scope.myData = orderByPriorityFilter($scope.data); }); $scope.gridOptions = { data: 'myData',enableCellEditOnFocus: true }; }); 

Cependant, cette solution place les données dans ma grille ng, mais si je modifie une des cellules, les modifications ne sont pas automatiquement appliquées à la base de données.

J'ai essayé diverses manières, mais aucun d'eux ne semble fonctionner:

 $scope.$on('ngGridEventEndCellEdit',function(value){ $scope.data.$set(value); }); 

Nan.

J'ai également essayé les gestionnaires d'événements angularFire tels que .$on("change")

Les tables que je crée seront éditées par plusieurs utilisateurs en temps réel.

La solution Kato convertit bien les objets firebase en tableaux, mais je dois également trouver une façon de convertir les valeurs éditées en ng-grid en objets afin que je puisse les stocker en base de feu à la volée.

Si j'ajoute ng-blur="updateEntity(col, row)" à mon editableCellTemplate: puis j'ajoute ceci:

 $scope.updateEntity = function(col,row){ console.log(row.entity); console.log(col.field); }; 

La console se déconnecte parfaitement, mais je reçois aussi cette erreur:

Error: Firebase.set failed: First argument contains an invalid key ($id) in property 'targetScope'. Keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]"

PS Je n'obtiens cette erreur que si je l'ai aussi:

 $scope.$on('ngGridEventEndCellEdit',function(value){ $scope.data.$set(value); }); 

Si je n'ai pas cette pièce, rien n'est sauvegardé sur firebase (ou au moins essayé).

J'ai finalement trouvé la solution !!

Tout ce qu'il faut à faire consiste à ajouter ceci: ng-blur="updateEntity(col, row)" à editableCellTemplate: puis ceci:

 $scope.updateEntity = function(col,row){ $scope.data.$save(row.entity.$id); }; 

Maintenant ceci: $scope.data.$set(row.entity.$id); Ne fonctionnera pas, car il remplacera TOUTE LA BASE DE DONNÉES DE VOTRE FIREBASE par id (donc un nombre, par exemple "0"). Donc toujours le tester avant de l'utiliser! 🙂

Tadaaaa! Reliure de données à 3 voies!