如何禁用saveRow事件ui-grid

时间:2015-12-07 13:45:54

标签: javascript angularjs angular-ui-grid

我正在使用ui-grid在UI中显示我的表格。我有一个要求,我不希望表自动保存数据。我希望用户编辑表格中的所有数据,然后单击按钮更新所有编辑的数据。

以上行为工作正常,但只有问题我得到的是每当用户在一行中编辑一个单元格,几秒钟后,该单元格变为灰色且无法编辑。在浏览器cnsole上我收到此错误:

引发saveRow事件时没有返回承诺,没有人正在侦听事件,或者事件处理程序没有返回承诺

由于上面的JS错误,整行变得不可编辑。 除非我点击我的按钮,否则如何告诉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){
                                        }
                                    });
                                }
                            });

2 个答案:

答案 0 :(得分:5)

在网格选项中设置&#34; rowEditWaitInterval:-1&#34; ,默认情况下永远不会调用saveRow方法,因此您可以在自定义方法中保存修改后的数据。 你可以访问像这样的污垢

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

答案 1 :(得分:3)

@Jha:看看下面的url,我刚刚添加了假保存方法,除非你在其中定义你的保存功能,否则不会保存任何数据。 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”。我希望你的保存功能也能正常工作。