jqGrid с пользовательским типом сортировки - PullRequest
1 голос
/ 24 июля 2010

Я использую jqGrid 3.7.2 с локальными данными.Для некоторых столбцов стандартных типов сортировки недостаточно.Мне нужно предоставить собственный тип сортировки, который, как я понимаю из документации, возможен.Я не знаю, как заставить это работать хотя.Приведенный ниже код - моя лучшая попытка заставить его работать - хотя я не могу заставить его вызывать пользовательскую функцию сортировки.Идея состоит в том, чтобы отсортировать поле Posn в следующем порядке: «GK» -> «DEF» -> «MID» -> «STR»Вот код, который я хотел бы получить:

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

Ответы [ 2 ]

3 голосов
/ 25 июля 2010

Возможно, вы читали об использовании 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, но не более в версии 3.7.2 jqGrid. Функция sorttype как функция реализована в jqGrid после выпуска версии 3.7.2.

Таким образом, чтобы использовать sorttype в качестве функции, вам необходимо загрузить последнюю версию jqGrid из http://github.com/tonytomov/jqGrid/tree/master. Это несжатая версия 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 вы можете найти рабочий пример кода, в котором пользовательская функция действительно работает.

2 голосов
/ 25 июля 2010

Согласно этому сообщению на форуме , пользовательский sorttype вызывается только при инициализации сетки, а не во время события onSortCol:

Как я понимаюПрямо сейчас, если у меня есть собственный тип сортировки, такой как sorttype: sortDate, функция sortDate будет вызываться только при инициализации jqGrid, а не при событии onSortCol.Является ли единственный способ вызвать onSortcol вызов SortDate - вручную перехватить событие onSortCol и написать утомительный код, который делает это и соответствующим образом обновляет сетку?Почему определение sorttype: sortDate не происходит автоматически после события onSortCol?Я имею в виду, когда jqGrid инициализируется, он сортируется правильно, но когда я вызываю событие, он должен выполнять некоторую встроенную сортировку.Я спрашиваю, потому что моя функция sortDate не имеет кода, который на самом деле обновляет jqGrid.он просто возвращает 1, -1 или 0. он используется в чем-то за пределами jqGrid…

Объясняет ли это поведение, которое вы видите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...