2010-07-24 199 views
1

我正在使用jqGrid 3.7.2本地數據。對於某些列,缺省的分類類型是不夠的。我需要提供一個自定義排序類型,我從文檔中理解是可能的。我不知道如何讓它工作。下面的代碼是我的最佳嘗試 - 我不能讓它調用自定義排序功能。這個想法是按照'GK' - >'DEF' - >'MID' - >'STR'的順序排列'Posn'字段。這是我想獲得工作的代碼:jqGrid與自定義sorttype

<!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> 
+0

你可以在發佈時設置你的代碼的格式嗎?在目前的狀態下它有點不可讀。 – kander 2010-07-24 09:52:54

+0

另外,函數tableToGrid是什麼? – kander 2010-07-24 10:04:59

回答

3

也許你讀了關於sorttype作爲一個函數在託尼的回答我的線程http://www.trirand.com/blog/?page_id=393/help/custom-local-sort-with-respect-of-the-function-as-index/的用法。你的問題可能很容易解決。我建議使用index作爲自定義排序本地jqGrid數據的函數,在3.7.1版本中可以正常工作,但在jqGrid的3.7.2版本中不會更多。功能sorttype作爲一個函數在版本3.7.2後發佈的jqGrid 中實現。

所以爲了能夠使用sorttype因爲你必須從http://github.com/tonytomov/jqGrid/tree/master下載jqGrid的最新版本的功能。這是jqGrid的未壓縮版本。如果您對jqGrid的未壓縮版本不熟悉,我會建議您閱讀http://www.trirand.com/jqgridwiki/doku.php?id=wiki:how_to_install#development_installation以瞭解js文件中的哪些文件以及您應該包含哪些文件。在http://www.ok-soft-gmbh.com/jqGrid/CustomSorttype1.htm下,您可以找到自定義函數真正起作用的代碼的工作示例。

+0

絕對太棒了。謝謝。 是的,我確實在你提到的線程中看到了自定義排序的想法,但沒有提到這些事情在3.7.2中不起作用!我假設我誤解了一些東西。 我認爲這對任何使用本地數據的人來說都是至關重要的功能,所以這裏是3.7.3! – cjm19682 2010-08-03 12:07:26

+0

歡迎你!我對這個功能的重要性有相同的看法。順便說下,jqrid的版本將是3.8而不是3.7.3,但它並不重要。不過,我很樂意幫助你! – Oleg 2010-08-03 12:14:07

2

根據this forum post,定製sorttype當電網被初始化,而不是在onSortCol事件只叫:

據我瞭解它現在,如果我有一個自定義類型sorttype:sortDate,函數sortDate只會在jqGrid初始化時被調用,而不是事件onSortCol。讓onSortcol調用SortDate的唯一方法是通過手動控制onSortCol事件並編寫這樣的單調代碼並相應地更新網格?爲什麼不自定義sorttype:sortDate會自動調用onSortCol事件?我的意思是,當jqGrid獲得初始化時,它會正確排序,但是當我調用事件時,它必須做一些構建。爲什麼我問是因爲我的sortDate函數沒有任何實際更新jqGrid的代碼。它只是返回1,-1或0.它用於jqGrid之外的東西...

這是否解釋了您所看到的行爲?