0

質問: "editable:true" 列を正しく並べ替えるにはどうすればよいですか?

次のリンクは、編集可能な列をソートできるようにする「onclick」ハンドラー関数を提供しているようです。( https://stackoverflow.com/a/9290716/652078 )

しかし、それを使用していても、列をクリックすると次のエラーが表示されます。

'handler' is null or not an object 列をクリックしたときのメッセージ

以下に、上記のリンクから借用した列定義と「クリック」ハンドラー コードを示します。

-このソリューションに関して、機能を妨げる古いものはありますか?

-または、私の列定義は、そのような「onclick」ハンドラーが機能しないようにしますか?

助けてくれてありがとう!

列の定義は次のとおりです。

    {
        name: 'recType',           
        label: 'recType',           
        index: 'recType',                                               
        width: 100, 
        fixed: true,  
        keys:   true,     
        editable: true, 
        edittype: "select",  
        editoptions: {value: rectypelist}, 
        stype: 'select', 
        formatter: 'select'
    },       

クリックイベント関数(上記リンクで説明されている手法)...

    $(".ui-jqgrid-htable th").click(function()  //.on('click', 'th', function(e)   // 
    {
        var $grid = contentB1Grid;
        $.each($grid[0].grid.headers, function () {
            var $th = $(this.el), i, l, clickHandler, clickHandlers = [],
                currentHandlers = $._data($th[0], "events"),   //$th.data('events'),
                clickBinding = currentHandlers.click;

            if ($.isArray(clickBinding)) {
                for (i = 0, l = clickBinding.length; i < l; i++) {
                    clickHandler = clickBinding[i].handler;
                    clickHandlers.push(clickHandler);
                    $th.unbind('click', clickHandler);
                }
            }
            $th.click(function () {
                var p = $grid[0].p, savedRow = p.savedRow, j, len = savedRow.length;
                if (len > 0) {
                    // there are rows in cell editing or inline editing
                    if (p.cellEdit) {
                        // savedRow has the form {id:iRow, ic:iCol, name:nm, v:value}
                        // we can call restoreCell or saveCell
                        //$grid.jqGrid("restoreCell", savedRow[0].id, savedRow[0].ic);
                        $grid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
                    } else {
                        // inline editing
                        for (j = len - 1; j >= 0; j--) {
                            // call restoreRow or saveRow
                            //$grid.jqGrid("restoreRow", savedRow[j].id);
                            $grid.jqGrid("saveRow", savedRow[j].id);
                        }
                    }
                }
            });
            l = clickHandlers.length;
            if (l > 0) {
                for (i = 0; i < l; i++) {
                    $th.bind('click', clickHandlers[i]);
                }
            }
        });   
    });
4

1 に答える 1

0

私の編集可能な列は、実際には「正しく」ソートされています...

並べ替える列は、編集可能な「ドロップダウン」(またはリストボックス) 列であることを思い出してください。

「編集可能な」列を並べ替えることができないというさまざまな投稿に基づいて、私はフープを飛び越えていました。これには、そのような問題に対処する Oleg の投稿された回答の 1 つからのスニペットを使用する試みが含まれていました。

しかし、実際の問題は、ディスプレイの「値」ではなく、ドロップダウン リストの「キー」値の文字列値に対してソートが実行されることでした。(fwiw、「キー」はたまたま数値コードです)。

-- 繰り返しますが、$(".ui-jqgrid-htable th").click(function()私が試みていたのは実際の問題とは無関係でした。 (ただし、「ハンドラーがnullであるか、オブジェクトではありません」というjavascriptエラーが発生した理由はまだわかりません)

そして、それは基本的に、「なぜこの手法が機能せず、「editable:true」列を適切にソートできないのですか?」という質問に答えます。

ここで、質問を調査する必要があり ます。「キー」値ではなく「表示」値でソートが実行されるように、編集可能なリストボックス列を構成するにはどうすればよいですか?

更新: 「キー」値ではなく、リストボックスエントリの「表示」値で並べ替えが実行されるように、この JQGrid 列定義を構成するに はどうすればよいですか? でこの問題を解決しました (自分の質問にもう一度答えました) 。

-- いずれにせよ、少なくとも私の以前に投稿された質問を見るために時間を割いてくれた人に感謝します.

:-)

于 2013-08-13T16:21:39.877 に答える