0

Xpage でカスタム コントロールを使用して、jqGrid でテーブルを作成しています。jqGrid は JSON 経由でデータを受け取り、テーブルを正しく埋めます。

私の質問は、jqGrid のソート機能に関するものです。テーブルを最初に作成するときに、「docname」列のセル値にカスタム フォーマッタを適用します。私が抱えている問題は、列のいずれかをソートした後、このフォーマッターが使用できなくなることです。フォーマットは引き続き適用されますが、この特定のフォーマッタは、別の Xpage を起動し、パラメータ「docid」に依存する URL を作成します。

これが私のカスタムフォーマッタです:

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

しかし、これは並べ替えをすべて一緒に壊すだけです。

私はこれらの投稿も読みました:

onSortCol イベント

JQGrid ソート - onSortCol イベントをトリガーする方法

jqGrid - init 後に 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}

                            }

                });
4

2 に答える 2

1

isArray を使用して、rowObject["docid"] または rowObject[integer]: jqGrid - rowObject inconsistencies?を使用するかどうかを判断することを示唆するこの回答をご覧ください 。

于 2013-08-02T19:54:46.473 に答える
1

私はこの方法で問題を解決しました。jqGrid では、最初のロード時にリモート データから "docid" パラメータを正常に受信していましたが、ソート関数が呼び出すとすぐに "未定義" に設定されます。

@PerHenrikLausten が彼のリンクで指摘したように、onload 関数が完了すると、このリモート データ型はローカル データに切り替えられます。docid を非表示の列にロードすることで、データ型が切り替えられた後、フォーマッターのパラメーターとして使用できるようになります。

追加することにより:

'Docid' as a colName & {name:'docid', index:'docid', hidden: true} to the colModel

これにより、「未定義」であってはならないものとしてdocidパラメーターを使用して、ソート可能にtrueに設定した任意の列からjqGridをソートできます。

ご意見をお寄せいただきありがとうございます。

于 2013-08-02T17:35:30.053 に答える