jqGrid onDelete 事件处理程序

jqGrid onDelete event handler

我正在使用带有 datatype: 'local' 的 jqGrid。网格数据正在通过 addRowData 动态设置。 我不使用异步 ajax 东西,例如 url + datatype: json 因为网格必须只显示客户端状态。

现在我想使用 jqGrid 删除行功能 (delbutton: true),它调用 delGridRow 函数。这可以很好地删除该行,但我当然需要删除基础数据。由于所有这些都只是客户端,我不能使用 editurl.

我想要的是 onRowDeleteonRowEdited 事件。但是 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。所以我想你使用 formatter: "actions"formatter: "actions" 在单击删除按钮时调用 delGridRow。我建议您使用 afterCompleteafterSubmit 回调,其中第二个参数包含有关已删除行的信息(请参阅 the documentation)。因此,我建议您添加 formatoptions: {delOptions: {...}},其中 delOptions 包括 afterCompleteafterSubmit 回调。如果您使用 afterSubmit 回调,您只应该不要忘记 return [true]。这种方式看起来更简单,因为你所做的 delGridRow 的子类化。