我在 Xpage 上使用自定义控件来构建带有 jqGrid 的表。jqGrid 通过 JSON 接收数据并正确填充表格。
我的问题是 jqGrid 的排序功能。当表格首次构建时,我将自定义格式化程序应用于“docname”列的单元格值。我遇到的问题是在对该格式化程序的任何列进行排序后变得无法使用。该格式仍然适用,但这个特定的格式化程序构建了一个启动另一个 Xpage 的 url 并依赖于参数“docid”。
这是我的自定义格式化程序:
function openDocument(cellvalue, options, rowObject) {
return "<a target='#{javascript:compositeData.target}' title='Open Document'
href='https://test.url.com?DocID=" +rowObject["docid"]+
"&action=#{javascript:compositeData.action}' class='doclink'>"
+ cellvalue + "</a>"; }
在对网格进行排序后,有什么方法可以将 rowObject“docid”返回到 openDocument 格式化程序中?
我研究了一些并找到了 onSortCol 事件并将其初始化如下:
onSortCol: function(index,iCol,sortorder) {alert("Test")}
我在 onSortCol 初始化中的警报正在工作,我只需要在排序运行后找出如何设置我的“docid”参数,因为它当前在排序后设置为未定义。
我试过放入:
{rowObject["docid"]}
但这只会破坏排序。
我也读过这些帖子:
jqGrid - 是否可以在初始化后设置 onSortCol?
谢谢你的帮助。
编辑:
jqGrid 定义:
$().ready(function(){
jQuery("#listxGrid").jqGrid({
url:'#{javascript:compositeData.url}',
datatype: "json",
colNames:#{javascript:compositeData.colNames},
colModel:#{javascript:compositeData.colModel},
shrinkToFit: false,
jsonReader: {
repeatitems: false,
id: '#{javascript:compositeData.colID}',
root: function (obj) {
if ($.isArray(obj)) return obj;
if ($.isArray(obj.items)) return obj.items;
return [];
},
page: function () { return 1; },
total: function () { return 1; },
records: function (obj) {
if ($.isArray(obj)) return obj.length;
if ($.isArray(obj.items)) return obj.items.length;
return 0;
}
},
gridview: true,
loadonce: true,
ignoreCase: #{javascript:compositeData.ignoreCase},
rowNum: #{javascript:compositeData.rowNum},
rowList: #{javascript:compositeData.rowList},
rownumbers: #{javascript:compositeData.showRowNumbers},
height: #{javascript:compositeData.height},
caption: '#{javascript:compositeData.caption}',
pager: '#pagerxGrid',
viewrecords: true,
emptyrecords: '#{javascript:compositeData.emptyRecords}',
sortable: true,
onSortCol: function(index,iCol,sortorder) {alert(index)},
grouping: #{javascript:compositeData.grouping},
groupingView : {
groupField : #{javascript:compositeData.groupField},
groupDataSorted : true,
groupColumnShow : #{javascript:compositeData.showGroupCol}
}
});