我在Xpage上使用自定义控件来构建一个带有jqGrid的表。 jqGrid通过JSON接收数据并正确填充表。
我的问题是jqGrid的sort函数。我将自定义格式化程序应用于我的" docname"的单元格值。表首次构建时的列。我遇到的问题是在对任何列进行排序后,此格式化程序变得无法使用。格式仍然适用,但是这个特殊的格式化程序构建了一个url,用于启动另一个Xpage并依赖于参数" 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&#34; docid&#34;排序网格后返回openDocument格式化程序?
我研究了一些并找到了onSortCol事件并将其初始化为:
onSortCol: function(index,iCol,sortorder) {alert("Test")}
我在onSortCol启动时的提醒工作正常,我只需要了解如何设置我的&#34; docid&#34;运行sort之后的参数,因为它在排序后当前设置为undefined。
我试过投入:
{rowObject["docid"]}
但这只会打破排序。
我也阅读了这些帖子:
JQGrid Sorting - how to trigger onSortCol event
jqGrid - Is it possible to set onSortCol after init?
感谢您的帮助。
编辑:
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}
}
});
答案 0 :(得分:1)
我最终以这种方式解决问题。在jqGrid上,它在第一次加载时从远程数据接收“docid”参数就好了但是只要调用它的sort函数将被设置为“undefined”。
正如@PerHenrikLausten用他的链接指出的那样,在onload函数完成之后,这个远程数据类型然后被切换到本地数据。通过将docid加载到隐藏列中,可以在切换数据类型后将其作为格式化程序的参数。
添加:
'Docid' as a colName & {name:'docid', index:'docid', hidden: true} to the colModel
它允许我从我使用docid参数排序设置为true的任何列中对jqGrid进行排序,因为它不应该是“未定义的”。
感谢大家的意见。
答案 1 :(得分:1)
看一下这个答案,建议使用isArray来确定是使用rowObject [“docid”]还是rowObject [integer]: jqGrid - rowObject inconsistencies?