Jquery jqGrid格式化程序和可排序列-不';t排序

Jquery jqGrid格式化程序和可排序列-不';t排序,jquery,jqgrid,Jquery,Jqgrid,我正在为我的jqGrid columnModel使用自定义格式化程序,无法使用格式化程序函数进行排序。如果删除格式化程序,则列排序正常 jQuery("#listAgentOptions").jqGrid({ height: 240, datatype: "local", colNames: [' ', 'First Name', 'Last Name', 'Role'], colModel: [ { name: 'status', index: 'sta

我正在为我的jqGrid columnModel使用自定义格式化程序,无法使用格式化程序函数进行排序。如果删除格式化程序,则列排序正常

jQuery("#listAgentOptions").jqGrid({
    height: 240,
    datatype: "local",
    colNames: [' ', 'First Name', 'Last Name', 'Role'],
    colModel: [
    { name: 'status', index: 'status', width: 18, sorttype: 'text', align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == 1 ? "<img src='images/agent_green_s.png' alt='Ready' title='Ready' />" :
        cellvalue == 3 ? "<img src='images/agent_red_s.png' alt='Busy' title='Busy' />" :
        "<img src='images/agent_orange_s.png' alt='Pending Ready' title='Pending Ready' />";
    },
        unformat:
    function(cellvalue, options, rowObject) { return Math.floor(Math.random() + 0.1).toString(); }
    },
    { name: 'firstName', index: 'firstName', width: 92 },
    { name: 'lastName', index: 'lastName', width: 142 },
    { name: 'role', index: 'role', sorttype: 'int', width: 36, align: 'center', formatter: function(cellvalue, options, rowObject) {
        return cellvalue == true ? "<img src='images/user_gray.png' alt='Supervisor' title='Supervisor' />" : "<img src='images/user.png' alt='Agent' title='Agent' />";
    }, unformat:
    function(cellvalue, options, rowObject) { return cellvalue; }
    }
    ],
    sortname: 'lastName'
});
如何使分拣正常工作

更新。我刚刚下载了jqGrid的最新版本-同一期


我也尝试过使用
unformat:function(cellvalue,options,rowObject){}
但是cellvalue在那里是空的:-E当我使用
返回Math.floor(Math.random()+0.1).toString()时
它会随机排序(每次单击),但
返回cellvalue只返回一个空字符串。

尝试使用Firebug进行调试并检查服务器接收到的内容。使用
可排序:true


顺便说一下,
sorttype
参数仅在本地工作(
datatype:local
)。

在内部,jqGrid使用
unformat
获取单元格的值:

        $.each(ts.rows, function(index, row) {
            try { sv = $.unformat($(row).children('td').eq(col),{rowId:row.id, colModel:ts.p.colModel[col]},col,true);}
            catch (_) { sv = $(row).children('td').eq(col).text(); }
            row.sortKey = findSortKey(sv);
            rows[index] = this;
        });
然后使用列的
sorttype
处理程序解析单元格值,对于int:

            findSortKey = function($cell) {
                return IntNum($cell.replace(stripNum, ''),0);
            };

因此,基本上,如果
unformat
函数为每个单元格返回正确的整数,我希望列排序也能正常工作。如果您仍然有问题,请发布您的完整代码,包括
unformat

的内容。可能您的问题不在您要搜索的地方


您在jqGrid中使用什么样的数据存储?我指的是参数数据类型的值。如果从服务器加载jqGrid数据,服务器将从客户端接收排序信息,服务器必须返回排序后的数据。格式化程序仅用于按您喜欢的方式显示数据客户端排序适用于
数据类型:'xmlstring'
数据类型:“客户端”
,但不适用于
数据类型:“xml”
数据类型:“json”
数据类型:“jsonp”
。像
sorttype
这样的参数仅适用于客户端排序,而在服务器端排序时将被忽略。主要作用:如果您必须定义jqGrid的url参数,请使用服务器端排序。

好的,我已经知道了发生了什么

首先,必须使用
unformat
将初始值传递回jqGrid排序函数

jqGrid正在将
$(row).text()传递给
unformat
函数,对于只有html标记的单元格,该函数返回一个空字符串,并且没有更改它的选项。但是,您可以使用
unformat
函数的第三个参数,在我的例子中是
rowObject
。然后,您可以使用
$(rowObject).html()检索实际单元格值,并将其解析回值。现在可以进行排序了


另一件需要记住的事情是,如果您使用的是
sorrtype:'int'
,您将必须以字符串形式返回整数,就像
返回'1'

没有服务器,它正在对数组进行排序。是的,但由于某些原因,传递给unformat的cellvalue为空。您在问题中写入的信息较少。你能发布jqGrid的代码吗。然后你可以复制并解决你的问题。
            findSortKey = function($cell) {
                return IntNum($cell.replace(stripNum, ''),0);
            };