2015-12-07 7 views
6

Sto usando la griglia UI per visualizzare la mia tabella nell'interfaccia utente. Ho un requisito in cui non desidero che la tabella salvi automaticamente i dati. Voglio che l'utente possa modificare tutti i dati in una tabella e fare clic su un pulsante per aggiornare tutti i dati modificati.Come disabilitare la griglia di utente saveRow

Il comportamento sopra descritto funziona correttamente ma il problema è che ogni volta che un utente modifica una cella di fila, dopo pochi secondi, quella cella diventa grigia e non modificabile. Sul navigatore cnsole sto ottenendo questo errore:

Una promessa non è stato restituito quando l'evento saveRow è stata sollevata, sia nessuno sta ascoltando evento o gestore di eventi non ha restituito una promessa

A causa di sopra errore JS , l'intera riga diventa non modificabile. Come dire a ui-grid di non salvare i dati se non faccio clic sul mio pulsante.

Se gestisco l'evento saveRow, il mio pulsante non funziona. Per favore aiutami in questo senso.

Ecco i frammenti di codici rilevanti:

var grid = { 
        data : 'hwData['+key+']', 
        paginationPageSizes: [25, 50, 75], 
        paginationPageSize: 25, 
        enableGridMenu: true, 
        enableFiltering: true, 
        enableSelectAll: true, 
        enableColumnResize : true, 
        exporterCsvFilename: 'myFile.csv', 
        exporterMenuPdf: false, 
        exporterCsvLinkElement: angular.element(document.querySelectorAll(".custom-csv-link-location")), 

        onRegisterApi: function(gridApi){ 
          $scope.gridApi.push(gridApi); 
          gridApi.edit.on.afterCellEdit($scope,function(rowEntity, colDef, newValue, oldValue){ 
           if(oldValue == newValue){ 
            return false; 
           } 


           $("#test").prepend('<font color= "red"> ' +colDef.name+ 'Edited '); 


          }) 
          }, 

..............some more code 
.............. 
$.ajax({ 
             type:'POST', 
             url:'/HardwareInventory/ajax/storage/edit_owned_storage', 
             data: jsonHostNames, 
             dataType:"json", 
             contentType: "application/json; charset=utf-8", 
             success : function(result){ 
              if(result.status == "Success"){ 

               location.reload(true); 
              }else{ 
               bootbox.alert("Either hostname is not correct or you don't have permission to edit this team's data"); 


              } 
             }, 
             statusCode: { 
              500: function(){ 
               alert("Oops!, there has been an internal error"); 
              } 
             }, 
             complete: function(result){ 
             } 
            }); 
           } 
          }); 

risposta

5

impostato "rowEditWaitInterval: -1" nelle opzioni della griglia non sarà mai chiamare saverow metodo per impostazione predefinita, in modo da poter salvare i dati modificati nel vostro metodo personalizzato. E si può accedere a dirtyrows come questo

var dirtyRows = $ scope.gridApi.rowEdit.getDirtyRows ($ scope.gridApi.grid);

2

@Jha: Dai un'occhiata a seguito url dove ho appena aggiunto falso salvare metodo, che non salverà i dati fino a che non definire la funzione di salvataggio dentro. http://plnkr.co/edit/T0TLGLpLsk25vY6SUnzR?p=preview

// Salva i dati di ogni riga

gridApi.rowEdit.on.saveRow($scope, $scope.saveRow); 
$scope.saveRow = function (rowEntity) { 
     var promise = $q.defer(); 
     $scope.gridApi.rowEdit.setSavePromise(rowEntity, promise.promise); 
     promise.resolve(); 
    }; 

Il codice qui sopra risolvere l'errore "Una promessa non è stato restituito quando l'evento saveRow è stata sollevata, sia nessuno sta ascoltando evento o gestore di eventi non ha restituire una promessa ". Non dimenticare di aggiungere "$ q" nella funzione controller. Spero che anche la tua funzione di salvataggio funzioni correttamente.