2015-12-07 5 views
6

मैं यूआई में अपनी तालिका प्रदर्शित करने के लिए यूई-ग्रिड का उपयोग कर रहा हूं। मुझे एक आवश्यकता है जहां मैं नहीं चाहता कि तालिका डेटा को स्वतः सेव करे। मैं चाहता हूं कि उपयोगकर्ता तालिका में सभी डेटा संपादित करे और सभी संपादित डेटा को अपडेट करने के लिए बटन पर क्लिक करें।saveRow ईवेंट को कैसे अक्षम करें ui-grid

उपरोक्त व्यवहार ठीक काम कर रहा है, लेकिन जब भी कोई उपयोगकर्ता एक पंक्ति में सेल को संपादित करता है, तब भी कुछ सेकंड के बाद, वह कोशिका भूरे और अपरिहार्य हो जाती है। ब्राउज़र पर cnsole मैं इस त्रुटि हो रही है:

जब saveRow घटना उठाया गया था एक वादा वापस आ गया था नहीं, या तो कोई भी घटना के लिए सुन रहा है, या ईवेंट हैंडलर एक वादा वापस नहीं किया था

क्योंकि जे एस त्रुटि ऊपर की , पूरी पंक्ति गैर संपादन योग्य हो जाती है। जब तक मैं अपने बटन पर क्लिक नहीं करता तब तक डेटा को सहेजने के लिए ui-grid को कैसे बताना है।

यदि मैं saveRow ईवेंट को संभालता हूं तो मेरा बटन काम नहीं कर रहा है। कृपया इस बारे में मेरी मदद करें।

यहाँ प्रासंगिक कोड के स्निपेट होते हैं:

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){ 
             } 
            }); 
           } 
          }); 

उत्तर

5

सेट "पंक्तिबद्ध करेंटइंटर इंटरवल: -1" आपके ग्रिड विकल्पों में यह कभी भी डिफ़ॉल्ट रूप से सेवरो विधि को कॉल नहीं करेगा, ताकि आप संशोधित डेटा को अपनी कस्टम विधि में सहेज सकें। और आप इस

वर dirtyRows = $ scope.gridApi.rowEdit.getDirtyRows ($ scope.gridApi.grid) की तरह dirtyrows देख सकते हैं;

2

@Jha: जहां मैं सिर्फ विधि बचाने नकली जोड़ लिया है यूआरएल नीचे पर एक नज़र, जब तक आप अपने को बचाने के समारोह निर्धारित करेंगी कि कोई डेटा नहीं बचा लेगा है इसके अंदर। http://plnkr.co/edit/T0TLGLpLsk25vY6SUnzR?p=preview

// प्रत्येक पंक्ति डेटा

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

ऊपर कोड सहेजें अपनी त्रुटि का समाधान होगा "एक वादा वापस आ गया था नहीं जब saveRow घटना उठाया गया था, या तो कोई भी घटना के लिए सुन रहा है, या ईवेंट हैंडलर नहीं था एक वादा वापस करो "। नियंत्रक समारोह में "$ q" जोड़ने के लिए मत भूलना। मुझे आशा है कि आपका सेव फ़ंक्शन भी ठीक से काम करेगा।

संबंधित मुद्दे