Events jqGrid onDelete事件处理程序

Events jqGrid onDelete事件处理程序,events,jqgrid,handler,extend,Events,Jqgrid,Handler,Extend,我正在使用数据类型为“local”的jqGrid。网格的数据通过addRowData动态设置。 我不使用异步ajax,比如url+datatype:json,因为网格必须只显示客户端状态 现在我想使用jqGrid删除行功能(delbutton:true),它调用delGridRow函数。这很好地删除了行,但是我当然需要删除底层数据。因为所有这些都只是客户端,所以我不能使用editurl 我想要的是一个onRowDelete或onrowdedited事件。但是jqGrid不支持这样的东西,或者至少

我正在使用数据类型为“local”的jqGrid。网格的数据通过
addRowData
动态设置。 我不使用异步ajax,比如
url
+
datatype:json
,因为网格必须只显示客户端状态

现在我想使用jqGrid删除行功能(
delbutton:true
),它调用
delGridRow
函数。这很好地删除了行,但是我当然需要删除底层数据。因为所有这些都只是客户端,所以我不能使用
editurl

我想要的是一个
onRowDelete
onrowdedited
事件。但是jqGrid不支持这样的东西,或者至少我还没有发现这样的东西。实现我自己的删除按钮是可以的,但我只是通过工具栏实现了这一点,这不是我想要的

经过多次修改,我想出了以下解决方案,将我自己的事件处理程序添加到jqGrid中:

    var originalDelFunc = $.fn.jqGrid.delGridRow;
    $.fn.jqGrid.delGridRow = function (rowids, oMuligrid) {
        var onPreDeleteRowEventHandler = this.getGridParam('onPreDeleteRow'),
            consumeFlag = false;
        if (typeof onPreDeleteRowEventHandler === 'function') {
            consumeFlag = !!onPreDeleteRowEventHandler(rowids, oMuligrid);
        }

        if (!consumeFlag) {
            originalDelFunc.call(this, rowids, oMuligrid);
        }
    };
用法:

    grid.jqGrid(
        'setGridParam',
        {
            onPreDeleteRow: function(rowids, oMuligrid) {
                // remove client data here
            }
        });

现在,我的问题是:为什么这么复杂?我是不是遗漏了什么?这个解决方案是可行的,还是很可能会与未来的版本决裂?

您在文章中写道您使用了
delbutton:true
。因此,我假设您使用
格式化程序:“操作”
格式化程序:“操作”
在单击删除按钮时调用
delGridRow
。我建议您使用
afterComplete
afterSubmit
回调,第二个参数包含有关已删除行的信息(请参阅)。因此我建议您添加
formatoptions:{delOptions:{…}}
其中
delOptions
包括
afterComplete
afterSubmit
回调。只有在使用
afterSubmit
callback时,才不要忘记返回
[true]
。这种方法似乎更简单,因为您可以对
delGridRow
进行子类化。

谢谢,请注意。毕竟有一个回调:-)