取消请求时,jqGrid将丢失选择

取消请求时,jqGrid将丢失选择,jqgrid,Jqgrid,我有一个要求,允许用户取消jqGrid(版本4.4.1)分页或排序操作,如果他们有任何不想丢失的选择 我最初试图在beforeRequest事件处理程序中处理此问题,但当我调用selarrrow函数时,总是返回一个空数组,因为选择似乎已被清除 然后,我尝试添加onPaging和onSorting事件处理程序,其中的选择可通过selarrrow函数获得,但是,当我从这些函数返回“stop”以取消请求(如中所指定)时,选择似乎仍然被清除。注意,这些行在网格中仍然显示为选中,但selarrrow返回空

我有一个要求,允许用户取消jqGrid(版本4.4.1)分页或排序操作,如果他们有任何不想丢失的选择

我最初试图在
beforeRequest
事件处理程序中处理此问题,但当我调用
selarrrow
函数时,总是返回一个空数组,因为选择似乎已被清除

然后,我尝试添加
onPaging
onSorting
事件处理程序,其中的选择可通过
selarrrow
函数获得,但是,当我从这些函数返回“stop”以取消请求(如中所指定)时,选择似乎仍然被清除。注意,这些行在网格中仍然显示为选中,但
selarrrow
返回空数组


我猜这是一个jqGrid缺陷,但是有人知道它是否在最近的版本中得到了修复,或者是否有配置解决方案吗?

这是我为这个问题准备的解决方案(注意:它需要),但是如果有人有一个更干净的解决方案,我会感兴趣:

var tempSelections,
    myGrid = $("#mygrid"),
    checkSelections = function() {
        var selections = myGrid.jqGrid("getGridParam", "selarrrow");
        if (selections && selections.length > 0) {
            tempSelections = selections;
        }
    }; 

myGrid.jqGrid({
    ... //settings
    multiselect: true,
    onPaging: checkSelections,
    onSortCol: checkSelections,
    beforeRequest: function() {
        if (tempSelections && tempSelections.length > 0) {
            if (!confirm("Do you want to clear the selections on this page?")) {
                _.forEach(tempSelections, function(selection) {
                    myGrid.jqGrid("setSelection", selection);
                });
                tempSelections = null;
                return false;
            }
            tempSelections = null;
        }
        return true;
    }
});

这是我为这个问题准备的解决方法(注意:它需要),但如果有人有一个更干净的解决方案,我会感兴趣:

var tempSelections,
    myGrid = $("#mygrid"),
    checkSelections = function() {
        var selections = myGrid.jqGrid("getGridParam", "selarrrow");
        if (selections && selections.length > 0) {
            tempSelections = selections;
        }
    }; 

myGrid.jqGrid({
    ... //settings
    multiselect: true,
    onPaging: checkSelections,
    onSortCol: checkSelections,
    beforeRequest: function() {
        if (tempSelections && tempSelections.length > 0) {
            if (!confirm("Do you want to clear the selections on this page?")) {
                _.forEach(tempSelections, function(selection) {
                    myGrid.jqGrid("setSelection", selection);
                });
                tempSelections = null;
                return false;
            }
            tempSelections = null;
        }
        return true;
    }
});

我认为在使用
onPaging
时存在一个bug。如果该方法返回
“stop”
,则选择仍被清除。原因是代码片段中的顺序

clearVals=函数(onpaging){
var-ret;
if($.isFunction(ts.p.onPaging)){ret=ts.p.onPaging.call(ts,onPaging);}
ts.p.selrow=null;
如果(ts.p.multiselect){ts.p.selarrrow=[];setHeadCheckBox(false);}
ts.p.savedRow=[];
if(ret==='stop'){return false;}
返回true;
};
正确的代码应该是

clearVals=函数(onpaging){
var-ret;
if($.isFunction(ts.p.onPaging)){ret=ts.p.onPaging.call(ts,onPaging);}
if(ret==='stop'){return false;}
ts.p.selrow=null;
如果(ts.p.multiselect){ts.p.selarrrow=[];setHeadCheckBox(false);}
ts.p.savedRow=[];
返回true;
};
您可以将4.5.2版的
jquery.jqGrid.src.js
的第2045行(使用
if(ret=='stop'){return false;}
)移动到2041(版本4.4.1中的第1898行)(在
if($.isFunction(ts.p.onPaging)){ret ts.p.onPaging.call(ts,onPaging);}
之后)之后,它对应于版本4.4.4.4.1中的第1902行)来修复这个错误

onSortCol
的用法似乎是正确的,如果回调返回
“stop”
字符串,则选择应保持不变


更新了:我将相应的bud补丁发布为pull请求。今天它被合并到jqGrid的主代码中(请参阅)。因此,下一个版本(>4.5.2)不应该有您描述的更多问题。

我认为在使用
onPaging
时存在一个bug。如果该方法返回
“stop”
,则选择仍被清除。原因是代码片段中的顺序

clearVals=函数(onpaging){
var-ret;
if($.isFunction(ts.p.onPaging)){ret=ts.p.onPaging.call(ts,onPaging);}
ts.p.selrow=null;
如果(ts.p.multiselect){ts.p.selarrrow=[];setHeadCheckBox(false);}
ts.p.savedRow=[];
if(ret==='stop'){return false;}
返回true;
};
正确的代码应该是

clearVals=函数(onpaging){
var-ret;
if($.isFunction(ts.p.onPaging)){ret=ts.p.onPaging.call(ts,onPaging);}
if(ret==='stop'){return false;}
ts.p.selrow=null;
如果(ts.p.multiselect){ts.p.selarrrow=[];setHeadCheckBox(false);}
ts.p.savedRow=[];
返回true;
};
您可以将4.5.2版的
jquery.jqGrid.src.js
的第2045行(使用
if(ret=='stop'){return false;}
)移动到2041(版本4.4.1中的第1898行)(在
if($.isFunction(ts.p.onPaging)){ret ts.p.onPaging.call(ts,onPaging);}
之后)之后,它对应于版本4.4.4.4.1中的第1902行)来修复这个错误

onSortCol
的用法似乎是正确的,如果回调返回
“stop”
字符串,则选择应保持不变


更新了:我将相应的bud补丁发布为pull请求。今天它被合并到jqGrid的主代码中(请参阅)。因此,下一个版本(>4.5.2)不应该有您描述的更多问题。

jqGrid代码的相应修复现在与github上jqGrid的主代码合并。请参阅我答案的更新部分。jqGrid代码的相应修复现在与github上jqGrid的主代码合并。请参阅我答案的更新部分。