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