Получение данных строки jqgrid, типизированных в соответствии со спецификациями colModel - PullRequest
0 голосов
/ 19 января 2012

jqgrid позволяет указывать информацию о типе как часть colModel, например,

editrules:{required:true, number: true},

Хотя это влияет только на проверку, было бы неплохо получить все данные строки, используя эту информацию.

jqGrid('getRowData')

возвращает все данные в виде строк

Возможно ли каким-либо образом преобразовать результат в типизированную информацию (столбец с числом: true следует преобразовать в целое число, чтобы рассматривать его как целое число на стороне веб-сервера)если JSON используется для кодирования / декодирования при представлении данных сетки).

1 Ответ

0 голосов
/ 19 января 2012

Проблема в том, что jqGrid имеет нет информации о типе данных. Существуют параметры форматирования, сортировки, редактирования и поиска для создания элементов управления для редактирования или поиска, параметры проверки и т. Д., Но нет информация о типе данных .

Кроме того, jqGrid получает входные данные во многих случаях в виде строк. Даже тип JavaScript number - это совсем не то, что нужно, потому что JavaScript не имеет, например, integer типа данных.

Метод getRowData использует unformatter для чтения строкового содержимого ячеек. В некоторых случаях, например, если вы используете параметр datatype: 'local' и data для заполнения сетки, введенные данные сохраняются во внутренних параметрах data и _index, и вы можете использовать параметры для получения typed информация о ячейке содержит.

Например, если вы определите столбец, содержащий дату, определение может быть следующим

{ name: 'invdate', index: 'invdate', width: 80, align: 'center',
    sorttype: 'date',
    formatter: 'date', formatoptions: { newformat: 'd-M-Y' }, editable: true,
    datefmt: 'd-M-Y',
    editoptions: {
        dataInit: function (elem) {
            setTimeout(function () {
                $(elem).datepicker({
                   dateFormat: 'dd-M-yy',
                    autoSize: true,
                    changeYear: true,
                    changeMonth: true,
                    showButtonPanel: true,
                    showWeek: true
                });
            }, 100);
        }},
    editrules: {required: true, date: true},
    searchoptions: {
        sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'],
        dataInit: function (elem) {
            setTimeout(function () {
                $(elem).datepicker({
                    dateFormat: 'dd-M-yy',
                    autoSize: true,
                    changeYear: true,
                    changeMonth: true,
                    showWeek: true,
                    showButtonPanel: true
                });
            }, 100);
        }}}

Вы видите, сколько мест нужно указать типу даты.

Я бы порекомендовал вам использовать шаблоны столбцов (см. здесь для получения дополнительной информации). В своих проектах, которые я реализую для клиентов, я определяю (в одном общем файле JavaScript) некоторые шаблоны, такие как dateTemplate, и определяет столбцы в сетке, такие как

.
{name: 'invdate', index: 'invdate', width: 80, template: my.dateTemplate}

, где my.dateTemplate определяется в упрощенной форме, как

var my = {
    dateTemplate: {
        align: 'center',
        sorttype: 'date',
        formatter: 'date', formatoptions: { newformat: 'd-M-Y' }, editable: true,
        datefmt: 'd-M-Y',
        editoptions: {
            dataInit: function (elem) {
                setTimeout(function () {
                    $(elem).datepicker({
                        dateFormat: 'dd-M-yy',
                        autoSize: true,
                        changeYear: true,
                        changeMonth: true,
                        showButtonPanel: true,
                        showWeek: true
                    });
                }, 100);
            }},
        editrules: {required: true, date: true},
        searchoptions: {
            sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'],
            dataInit: function (elem) {
                setTimeout(function () {
                    $(elem).datepicker({
                        dateFormat: 'dd-M-yy',
                        autoSize: true,
                        changeYear: true,
                        changeMonth: true,
                        showWeek: true,
                        showButtonPanel: true
                    });
                }, 100);
            }}}
};

То, как шаблон играет важную роль в качестве типа данных. Если вам нужно, вы можете написать свой собственный безопасный метод на основе параметров getRowData и template из colModel, чтобы получить необходимую информацию.

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