使用jqGrid在Sort函数后应用Custom Formatter

时间:2013-07-30 13:07:33

标签: jqgrid xpages

我在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"]}

但这只会打破排序。

我也阅读了这些帖子:

onSortCol Event

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}

                            }

                });

2 个答案:

答案 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?