Форматер jqGrid и сортируемый столбец - не сортирует - PullRequest
3 голосов
/ 03 мая 2010

Я использую пользовательский форматер для моей 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'
});

Строки добавляются так:

jQuery("#listAgentOptions").jqGrid('clearGridData');
$.each(result, function(i, item) {
    if (item.ContactType == 1) {
        jQuery("#listAgentOptions").jqGrid('addRowData', i+1, { firstName: item.ContactName.split(" ")[0], lastName: item.ContactName.split(" ")[1],
        role: item.IsSupervisor,
        status: item.Status == "Ready" ? 1 : item.Status == "Busy" ? 3 : 2
        });
    }
});

Как правильно настроить сортировку?

Обновление. Я только что скачал последнюю версию jqGrid - та же проблема.

Я также пытался использовать unformat: function(cellvalue, options, rowObject) { }, но там пустое значение: -E Когда я использую return Math.floor(Math.random() + 0.1).toString();, он сортирует вещи случайным образом (каждый раз, когда я нажимаю), но return cellvalue; просто возвращает пустую строку.

Ответы [ 4 ]

2 голосов
/ 03 мая 2010

Внутренне, 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.

1 голос
/ 04 мая 2010

ОК, я понял, что происходит.

Прежде всего вы должны использовать unformat для передачи начального значения обратно в функцию сортировки jqGrid.

jqGrid передает $(row).text() в unformat функцию, которая для ячеек с тегом html возвращает пустую строку, и нет возможности изменить ее. Однако вы можете использовать третий параметр функции unformat, который в моем случае равен rowObject. Затем вы можете получить фактическое значение ячейки с помощью $(rowObject).html() и проанализировать его обратно к значению. Сортировка теперь будет работать.

Еще одна вещь, которую следует помнить: если вы используете sorrtype: 'int', вам придется возвращать целое число в виде строки, например return '1';.

1 голос
/ 03 мая 2010

Это может быть ваша проблема не там, где вы ищете.

Какой тип данных вы используете в jqGrid? Я имею в виду значение параметра тип данных . Если вы загружаете данные jqGrid с сервера, сервер получает информацию о сортировке от клиента, а сервер должен возвращать отсортированные данные. Форматер используется только для отображения данных, которые вы предпочитаете. Сортировка на стороне клиента работает, например, с datatype: 'xmlstring' и datatype: "clientSide", но не с dataType:"xml" или dataType:"json" и dataType:"jsonp". Такие параметры, как sorttype, работают только с клиентской сортировкой и будут игнорироваться при серверной сортировке . Основная роль: если вам нужно определить url параметр jqGrid, используйте сортировку на стороне сервера.

0 голосов
/ 03 мая 2010

Попробуйте выполнить отладку с помощью Firebug и проверьте, что получает сервер. Используйте sortable: true.

Кстати, параметр sorttype работает только локально (datatype: local).

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