我正在使用带有datatype: 'local'
的jqGrid。网格数据通过addRowData
动态设置。
我不使用url
+ datatype: json
之类的异步ajax,因为网格必须只显示客户端状态。
现在我想使用调用delbutton: true
函数的jqGrid删除行功能(delGridRow
)。这会删除行,但我当然需要删除基础数据。由于所有这些只是客户端,我无法使用editurl
。
我想要的是onRowDelete
或onRowEdited
事件。但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
}
});
现在,我的问题是:为什么这么复杂?我在这里错过了什么吗?这个解决方案是否可行,或者它可能会与未来版本打破?
答案 0 :(得分:1)
您写道,您使用delbutton: true
。所以我想你使用formatter: "actions"
。点击“删除”按钮后formatter: "actions"
调用delGridRow
。我建议您使用afterComplete
或afterSubmit
回调,其中第二个参数包含有关已删除行的信息(请参阅the documentation)。因此,我建议您添加formatoptions: {delOptions: {...}}
其中delOptions
包含afterComplete
或afterSubmit
个回调。如果您使用[true]
回调,则只应该忘记返回afterSubmit
。这种方式似乎更简单,就像你做delGridRow
的子类化一样。