jqGrid onDelete事件处理程序

时间:2015-05-26 18:12:18

标签: events jqgrid handler extend

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

现在我想使用调用delbutton: true函数的jqGrid删除行功能(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
            }
        });

现在,我的问题是:为什么这么复杂?我在这里错过了什么吗?这个解决方案是否可行,或者它可能会与未来版本打破?

1 个答案:

答案 0 :(得分:1)

您写道,您使用delbutton: true。所以我想你使用formatter: "actions"。点击“删除”按钮后formatter: "actions"调用delGridRow。我建议您使用afterCompleteafterSubmit回调,其中第二个参数包含有关已删除行的信息(请参阅the documentation)。因此,我建议您添加formatoptions: {delOptions: {...}}其中delOptions包含afterCompleteafterSubmit个回调。如果您使用[true]回调,则只应该忘记返回afterSubmit。这种方式似乎更简单,就像你做delGridRow的子类化一样。