jqGrid与自定义sorttype

我正在使用本地数据的jqGrid 3.7.2。 对于某些列,缺省的分类types是不够的。 我需要提供一个自定义的sorttype,我从文档中理解是可能的。 我不知道如何让它工作。 下面的代码是我最好的尝试让它工作 – 我不能让它调用自定义sortingfunction。 这个想法是按'GK' – >'DEF' – >'MID' – >'STR'的顺序排列'Posn'字段。 这是我想要工作的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Table Testbed</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/south-street/jquery-ui.css"> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> <link rel="stylesheet" type="text/css" href="/thirdParty/jqGrid/ui.jqgrid.css" > <script type="text/javascript" src="/thirdParty/jqGrid/grid.locale-en.js"></script> <script type="text/javascript" src="/thirdParty/jqGrid/jquery.jqGrid.min.js"></script> <script type="text/javascript"> $().ready(function() { tableToGrid("#playerTable", { datatype: "local", sortable: true, hidegrid: false, multiselect: false, altRows: true, height: "100%", width: "155px", shrinkToFit: true, rowNum: 100, colNames: ['Posn','Name'], colModel: [ {name:'Posn', index:'Posn', width:100, sorttype: function(cell) { if (cell=='GK') return '0'; if (cell=='DEF') return '1'; if (cell=='MID') return '2'; if (cell=='STR') return '3'; } }, {name:'Name', index:'Name', width:200, sorttype:"text"} ] }); }); </script> </head> <body> <table id="playerTable"> <thead> <tr><th>Posn</th><th>Name</th></tr> </thead> <tbody> <tr><td>GK</td><td>Almunia</td></tr> <tr><td>GK</td><td>Fabianski</td></tr> <tr><td>DEF</td><td>Campbell</td></tr> <tr><td>DEF</td><td>Clichy</td></tr> <tr><td>MID</td><td>Denilson</td></tr> <tr><td>MID</td><td>Diaby</td></tr> <tr><td>STR</td><td>Arshavin</td></tr> <tr><td>STR</td><td>Bendtner</td></tr> </tbody> </table> </body> </html> 

也许你阅读了关于sorttype的用法作为一个函数在托尼的回答我的线程http://www.trirand.com/blog/?page_id=393/help/custom-local-sort-with-respect-of-the- function-as-index / 。 你的问题可能很容易解决。 我build议使用index作为自定义sorting本地jqGrid数据的函数,在3.7.1版本中可以正常工作,但在jqGrid的3.7.2版本中不会更多。 functionsorttype作为一个函数是在版本3.7.2 的jqGrid中实现的。

所以为了能够使用sorttype作为一个function,你必须从http://github.com/tonytomov/jqGrid/tree/master下载;最新版本的jqGrid。 这是jqGrid的一个未压缩版本。 如果您不熟悉jqGrid的未压缩版本,我会build议您阅读http://www.trirand.com/jqgridwiki/doku.php?id=wiki:how_to_install#development_installation以确定js文件中的哪一个以及哪个顺序你应该包括。; 在http://www.ok-soft-gmbh.com/jqGrid/CustomSorttype1.htm下,您可以find自定义函数真正起作用的代码的工作示例。;

根据这个论坛post ,一个自定义的sorttype只在网格被初始化时调用,而不是在onSortCol事件中onSortCol

据我现在的理解,如果我有一个自定义typessorttype:sortDate,函数sortDate只会被调用时jqGrid初始化,而不是事件onSortCol。 唯一能让onSortcol调用SortDate的方法是通过手工控制onSortCol事件并编写这样的繁琐代码,并相应地更新网格? 为什么不定义sorttype:sortDate会自动超越onSortCol事件? 我的意思是当jqGrid被初始化时,它sorting正确,但是当我调用事件时,它必须做一些内置的。 为什么我问是因为我的sortDate函数没有任何实际更新jqGrid的代码。 它只是返回1,-1或0.它用于jqGrid之外的东西…

这是否解释你所看到的行为?