Запретить восстановление строки, если при редактировании возникла ошибка - PullRequest
0 голосов
/ 12 января 2011
onSelectRow: function(id){
  if(id && id!==lastSel){
    jQuery(this).restoreRow(lastSel);
    lastSel=id;
  }
  jQuery(this).editRow(id,true,null,
                       function(response, postdata){
                           var data = eval('(' + response.responseText + ')');
                           data.result.success ? alert('success') : alert('error')
                       });
}

В этом случае я могу обрабатывать ошибки, но после этого данные строки восстанавливаются.Вопрос в том, как предотвратить восстановление строки, если data.result.success == false?

Если я редактирую через модальное окно, то все в порядке.Но во встроенном режиме этого не происходит.

Ответы [ 2 ]

1 голос
/ 06 сентября 2013

Я хотел исправить тот же сценарий, и я мог сделать это:

$.extend($.jgrid.inlineEdit, { restoreAfterError: false });

И в сеточной модели:

ajaxRowOptions: {
    complete: function(res, stat) {
        if (res.statusText=='OK') {
            return [true, res.responseText ];
        } else {
            return [false, res.responseText ];
        }
    }
}
1 голос
/ 12 января 2011

Функция editRow имеет следующие параметры:

jQuery("#grid_id").jqGrid('editRow',rowid, keys, oneditfunc, succesfunc, url,
                          extraparam, aftersavefunc,errorfunc, afterrestorefunc);

Ваш текущий код использует только succesfunc. Важно, чтобы сервер возвращал некоторый код состояния HTTP , который больше или равен 400. Тогда ответ сервера будет интерпретироваться как ошибка jQuery.ajax и jqGrid. Чтобы отобразить любое сообщение об ошибке или любое другое действие в случае ошибки, вы должны использовать параметр errorfunc функции editRow .

Еще одно маленькое замечание. Вы должны использовать jQuery.parseJSON или JSON.parse вместо использования eval.

ОБНОВЛЕНО : Я отвечу здесь на ваши вопросы из комментария. Почему важно использовать errorfunc и не всегда succesfunc? Есть разные причины. Если вы заполните коробку с сахаром, содержащим этикетку, это может иметь горькие последствия на вашей кухне. Точно так же в случае неправильного использования различных функций обратного вызова editRow. Я могу привести лишь несколько примеров:

  • Ошибки могут быть вызваны вашей серверной частью не только явно . Ваш веб-сервер может выдать исключение из любого другого вашего кода, такого как SQL-запросы. Даже если вы уловите все такие ошибки, входные данные, отправленные на сервер в неверном формате или с другой ошибкой, могут привести к ответу с ошибочным статусом HTTP и описанием ошибки. Такое сообщение об ошибке выдаст ваш веб-сервер используемой вами платформы (ASP.NET, PHP и т. Д.).
  • jQuery, используемый jqGrid, должен знать, какой ответ сервера успешен, а какой - ответ об ошибке. Часто ответ об ошибке имеет другой формат , поэтому не будет проанализирован jQuery.ajax (jQuery не преобразует его из строки JSON в объект).
  • Для jqGrid важно знать, был ли ответ успешным или нет. В случае ошибки jqGrid сделать одно после ответа, в случае успешного ответа - другое. Будут вызваны разные события, будут показаны разные сообщения и т. Д.

То, что я написал о работе с ошибками, является общим правилом. jqGrid определяет много событий в случае ошибок. Например, loadError для заполнения сетки, errorTextFormat для всех типов редактирования формы, errorCell для редактирования ячейки и errorfunc для встроенного редактирования , Все методы основаны на том факте, что в случае ошибки ответ сервера имеет код состояния HTTP, который соответствует ошибке (больше или равен 400).

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