2013-04-01 6 views
0

Во встроенном редактировании перед редактированием он создает внутренне массив (savedRow) и заполняет его значениями редактируемых полей, поэтому я могу получить доступ к этим значениям.jqGrid - вопросы редактирования формы

Я хотел бы знать, если в редакторе формы есть что-то похожее на это, потому что мне нужно получить доступ к значениям полей до того, как редактирование будет завершено, чтобы выполнить проверку, прежде чем поля будут «сохранены» в базы данных.

Кто-то может мне помочь?


EDITED:

Я здесь вывешивать часть моего кода (код одного поля), и я пытаюсь проверить как в пути (рядные редактирования и формы редактирования) , Для встроенное редактирование Я проверяю использование dataEvents и там я использую savedRow для доступа к данным, которые еще не были сохранены. Но когда я пытаюсь редактировать с помощью редактирования формы из-за использования savedRow, это показывает мне ошибку: savedRow is not defined. В случае этого поля editrules соответствует тому, что я хочу сделать, но я не знаю, произойдет ли это во всех этих полях.

{ name: 'ac_fd', index: 'ac_fd', width: 50, editable: true, 
    formatter: 'number', editrules: { number:true, required:true, minValue: 0.1, 
    maxValue: 1.0 }, formatoptions: { decimalPlaces: 1, decimalSeparator: '.'}, 
    editoptions: { 
     dataEvents: [ { 
      type: 'blur', fn: function(e) {       
       var savedrow = $("#list").getGridParam('savedRow'); 
       console.log($(this).val()); 
       if($(this).val() != savedrow[0]['ac_fd']) {   
       var eid='#' + savedrow[0]['id'] + '_ac_fd'; 
       var val_fd=$(this).val(); 
       var fd_min=0.1; 
       var fd_max=1.0; 

       if(isNaN(val_fd) || val_fd > fd_max || val_fd < fd_min) { 
         setTimeout(function(){ 
         $(eid).focus().select(); 
        },600); 


        $(eid).qtip({ 
         content: { 
          text: 'Fator de Demanda deve ser um <b>número</b> 
           entre <b>' + fd_min.toFixed(1) + '</b> e <b>' 
           + fd_max.toFixed(1) + '</b>.', 
          title: { 
          text: 'Atenção:', 
          button: true 
          } 
         }, 
         show: { 
          event: false, 

          ready: true, 

          effect: function() { 
          $(this).stop(0, 1).fadeIn(400); 
          }, 

          delay: 0, 
                }, 
         hide: { 
          event: false, 

          effect: function(api) { 
          $(this).stop(0, 1).fadeOut(900).queue(function() { 
           api.destroy(); 
          }); 
          }, 
         }, 
         style: { 
          classes: 'qtip-red qtip-rounded trif_tip_err', 
          tip: { 
          width: 10, 
          height:12 
          } 
         }, 
         position: { 
          my: 'bottom left', 
          at: 'top center', 
         }, 

         events: { 
          render: function(event, api) { 
          tip_timer.call(api.elements.tooltip, event); 
          } 
         } 
        }); 

       }  
       }   
      }   
     } ]    
    }     
    }, 

Так что если dataEvents обычен и используются для трех форм редактирования, где я могу сделать этот тип проверки (с использованием QTIP слишком, и я хочу, чтобы эта проверка используется в инлайн редактирования тоже)?

ответ

1

Причина, по которой jqGrid сохраняет редактирующую строку в интервале savedRow Параметр - это потому, что jqGrid изменить редактирование строки на месте. Только из-за этого встроенное редактирование и редактирование ячейки используют интервал savedRow. Редактирование формы не изменяет исходную строку сетки до завершения редактирования. Поэтому параметр savedRow используется при редактировании формы.

Если форма закрыта или ответ сервера будет содержать код ошибки HTTP, новые данные, введенные пользователем, не будут сохранены в сетке. Такая простая проверка на стороне сервера обычно достаточно. Если вы хотите реализовать дополнительную проверку на стороне клиента, вы можете использовать функцию editrules. Custom validation, как правило, достаточно. Это может помочь подтвердить одно поле формы. Если вам нужно сравнить несколько полей формы во время валидации (если значение одного поля определяет допустимые значения другого поля), то один использует дополнительный ответ beforeCheckValues.

ОБНОВЛЕНО: Внутри обработчика событий fn вы можете проверить, будет ли он называться внутри редактирования формы или нет. Есть много способов сделать это. Например, вы можете проверить $(e.target).closest(".FormGrid").length > 0. Если это правда, событие находится внутри формы. Кроме того, важно понимать, что текущая строка редактирования не изменена до успешной экономии на сервере. Поэтому вы можете использовать любое время getGridParam с опцией "selrow", чтобы получить идентификатор строки редактирования, и вы можете использовать getRowData или getCell, чтобы получить данные из сетки до начала изменения (то же, что и savedrow).

+0

Спасибо за ответ :) Hummm Я думал, что редактирование формы работает, как в встроенном редактировании, но теперь я понял. Большое спасибо @ Олег! :) – mailazs

+1

@mailazs: Добро пожаловать! Одна из больших проблем jqGrid заключается в том, что он содержит много дубликатов кода или многие близкие, но не одни и те же реализации одних и тех же вещей.Встроенное редактирование, редактирование ячеек и редактирование форм имеют только часть общих функций, таких как 'createEl',' bindEv' и 'checkValues' (из [модуля] (https://github.com/tonytomov/jqGrid/blob/master/ js/grid.common.js). Самая основная работа содержит * различную реализацию во всех трех режимах редактирования. – Oleg

+0

Huuumm Я думаю, они могли подумать о реализации основных функций во всех трех режимах, как в этом случае ... они мог бы реализовать что-то, что позволяет вам проверять поле по полю перед отправкой формы. Было бы очень полезно. :) У меня возникли проблемы с этими валидациями, потому что я использую 'dataEvents' для проверки на встроенное редактирование , а в 'dataEvents' я использую' savedRow', поэтому это создает мне проблему, когда я собираюсь использовать редактирование формы :(У вас есть какое-то предложение для меня? – mailazs

Смежные вопросы