Как передать данные при добавлении строки с помощью кнопки Добавить навигатор - PullRequest
1 голос
/ 18 декабря 2011

Как передать дополнительный ключ POST для добавления контроллера, если строка добавлена ​​с помощью кнопки Добавить навигатор?

Я попробовал приведенный ниже код для передачи _dokdata со значениями формы, но _dokdata не передается контроллеру в сервер.

$("#grid").jqGrid('inlineNav', '#grid_toppager', {
   addParams: {
    useDefValues : true,
    useFormatter : false,
    addRowParams : {
        extraparam : { _dokdata : FormData },
       editData: { _dokdata: FormData },
       },
    editData: { _dokdata: FormData },
    extraparam : { _dokdata : FormData },
   },

   add: true,
   edit: false,
   save: true,
   cancel: true,
   editParams : {}
   }); 

function FormData() {
    return JSON.stringify($("#_form").serializeArray());
}

1 Ответ

4 голосов
/ 18 декабря 2011

Кажется, что проблема, которую вы описываете, состоит в смешении небольшой ошибки в вашем коде и ошибки в коде jqGrid (см. Строки, начинающиеся с места ).

проблема в вашем коде состоит в том, что вы не правильно установили editParams, как для addParams.Правильное использование должно быть:

$("#grid").jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        useDefValues: true,
        addRowParams: {
            keys: true,
            extraparam: { _dokdata: FormData }
        }
    },
    editParams: {
        extraparam: { _dokdata: FormData }
    },
    add: true,
    edit: false,
    save: true,
    cancel: true
}); 

function FormData() {
    return JSON.stringify($("#_form").serializeArray());
}

Проблема в текущей версии кода jqGrid заключается, по моему мнению, в том, что jqGrid использует в кнопке Сохранить (см. здесь ) только настройкуeditParams.extraparam используются вместо использования чего-то вроде addParams.addRowParams.extraparam.Я добавил keys: true параметр в addParams.addRowParams параметрах inlineNav.Таким образом, вы увидите, что текущая реализация (v 4.3.0) jqGrid будет использовать addParams.addRowParams.extraparam, если пользователь сохранит изменения, нажав Enter и будет использовать editParams.extraparam в случае сохранениястрока кнопкой «Сохранить» кнопок навигатора.

ОБНОВЛЕНО : Я проверил код и обнаружил еще одну ошибку в jqGrid v. 4.3.0.Я предложил в запрос функции ввести настройку $.jgrid.inlineEdit, которую можно использовать, как и другие очень практичные настройки $.jgrid.edit, но в случае встроенного редактирования, а не редактирования формы.Запрос функции реализован в jqGrid 4.3.0, но реализация содержит ошибку.

Чтобы исправить ошибку, следует заменить строки 33 , 117 и 304 от

o = $.extend($.jgrid.inlineEdit, settings, args[0]);

до

o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);

Как видно из демонстрационная версия , все исправно работает после исправления ошибки.

ОБНОВЛЕНО 2 : вышеприведенное исправление идентично исправлению , которое по-прежнему неверно.Чтобы исправить ошибку, нужно сделать больше изменений в коде.Например, строки 32-36 (внутри editRow) можно изменить с

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
    o = settings;
}

на, например, следующие

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    settings.keys = false; // keys is args[0] and it's an object
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
    o = settings;
}

В том жеспособ, которым линии 116-120 (внутри saveRow)

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    o = $.extend($.jgrid.inlineEdit, settings, args[0]);
} else {
    o = settings;
}

можно изменить на

if(args[0] && typeof(args[0]) == "object" && !$.isFunction(args[0])) {
    settings.successfunc = null; // successfunc is args[0] and it's an object
    o = $.extend(true, {}, settings, $.jgrid.inlineEdit, args[0]);
} else {
    o = settings;
}

и линию 304

o = $.extend($.jgrid.inlineEdit, settings, args[0]);

может быть изменено на

o = $.extend(true, {afterrestorefunc: null}, $.jgrid.inlineEdit, args[0]);

ОБНОВЛЕНО 3 : я отправил мое предложение на трианд о проблеме "Удалить",Смотрите ту же демонстрацию, в которой используется исправление здесь .

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