Несколько вариантов форматирования даты в jqgrid

У меня есть поле даты в jqgrid, которое неправильно сортируется. Причина в том, что мой первоначальный formatter:'date' перезаписывается моей второй ссылкой на formatter: function(...). Как сохранить обе части функциональности?

Вот мой код:

{name:'FUSInvitedDateX',hidden:true,index:'FUSInvitedDateX',width:'250',
search: true,searchoptions:{sopt:['eq','ne','lt','le','gt','ge'], dataInit: 
function(elem) {$(elem).datepicker();}},sorttype: 'date', 
formatter:'date',formatoptions: {srcformat: 'm/d/Y', newformat: 'm/d/Y' },
formatter: function(cellvalue, options, rowObject) { return 
highlight(cellvalue, options, rowObject, ['FUSScheduledDateX','FUSCompletedDateX','InterviewStatus_DerivedX'],'interview-invite-late');}}

а затем в функции выделения у меня есть что-то вроде этого:

function highlight(cellvalue,options,rowObject,compare,color) {
                if (cellvalue.length==0) { return cellvalue; }
                [ evaluating code ]
                 return '<span>' + cellvalue + '</span>';

Любые советы будут высоко ценится


person richnwilson    schedule 15.06.2017    source источник


Ответы (1)


Извините, но нельзя определить два свойства с одинаковыми именами в одном объекте. С другой стороны, вы дважды включили свойство formatter в определение столбца. Это синтаксическая ошибка.

Даже если вы удалите formatter:'date' и будете использовать только пользовательский форматтер (функция обратного вызова formatter), то sorttype: 'date' не будет работать, потому что jqGrid не сможет правильно проанализировать дату.

Если вам действительно нужно использовать пользовательский форматтер (функция обратного вызова), вам также следует определить sorttype как функцию обратного вызова. Вы можете проанализировать входную строку внутри функции sorttype и вернуть ее как дату ISO (например, 2017-06-15).

person Oleg    schedule 15.06.2017
comment
Спасибо за быстрый ответ. Есть ли у вас какой-либо пример кода о том, как я бы изменил решение выше, чтобы а) разрешить отфильтрованное поле даты и все же б) разрешить настраиваемый модуль форматирования. Очень признателен. - person richnwilson; 16.06.2017
comment
@richnwilson: sorttype можно определить как функцию обратного вызова, которая должна возвращать значение, которое следует использовать вместо исходного значения при сортировке. Если вы используете srcformat: 'm/d/Y', например 16.06.2017, вы можете преобразовать его в 'Y-m-d', например 2017-06-16. Таким образом код sorttype может быть в упрощенном виде следующим: sorttype: function (cellValue) { var parts = cellValue.split('/'); return parts[2] + '-' + parts[0] + '-' parts[1]; }. Реальный код может быть немного сложнее, если ваши исходные данные могут быть 16.06.2017 вместо 16.06.2017, и данные могут быть пустыми или неопределенными. - person Oleg; 16.06.2017
comment
Спасибо. Я считаю, что порядок сортировки разрешен, используя следующее: sorttype: function(cellValue) { if (cellValue.length==0 || typeof cellValue === "undefined" ) { return false;} else {var $parts = cellValue.split('/'); var $yyyy = $parts[2]; var $m = $parts[0].length < 2 ? '0' + $parts[0] : $parts[0]; var $d = $parts[1].length < 2 ? '0' + $parts[1] : $parts[1]; return $yyyy + "-" + $m + "-" + $d;}} однако фильтр даты, похоже, не работает. Я пробовал логические условия =, ‹=, ›= с помощью средства выбора даты, но он просто показывает пробелы. - person richnwilson; 19.06.2017
comment
Я считаю, что теперь исправил это. Я изменил dataInit: function(elem) {$(elem).datepicker();}} на dataInit: function(elem) {$(elem).datepicker({dateFormat: 'm/d/yy'});}}. Это звучит правильно? - person richnwilson; 20.06.2017
comment
@richnwilson: я не могу вам помочь без демонстрации, которая включает некоторые тестовые данные. - person Oleg; 20.06.2017
comment
Привет Олег. В конце концов я смог изменить данные, чтобы все поля даты всегда были 10 символами, т.е. 06/06/2017. Как только я это сделал, ваш код типа сортировки работал отлично. Спасибо за вашу помощь. Ценится. - person richnwilson; 20.06.2017