Форматер jqGrid изменяет исходные данные? - PullRequest
3 голосов
/ 27 января 2011

У меня есть поле / столбец в моем jqGrid, который получает свое значение из элемента управления FlexBox (http://www.fairwaytech.com/flexbox)). Я использую форму для локального редактирования / добавления данных в сетку, а затем отправляю полные данные в целом всервер. Я реализовал элемент управления FlexBox в своей форме в качестве пользовательского элемента управления, дополненного функциями для создания элемента управления, получения значений и т. д. (editoptions: {custom_element: myCustomElem, custom_value: myCustomValue, ...)

Итак, у меня есть пара код / ​​значение (очень похоже на обычный выбор HTML), и в сетке я хочу показать значение, но хочу отправить код на сервер. Когда я загружаю данные с сервера, Я получаю пары код / ​​значение.

Поэтому я попытался написать собственный форматтер / неформатор, только чтобы выяснить, что форматер, кажется, необратимо изменяет исходные данные! Итак, как только я возвращаю значение из форматтера(т.е. при отображении данных в ячейке сетки) код теряется! И, таким образом, при вызове неформатирующего устройства (т. е. при отправке данных на сервер) кода больше нет!

Сетка настроена со следующими параметрами:

cellsubmit: 'clientArray', datatype: 'clientSide', editurl: '/dummy'

В моих параметрах navGrid для добавления / редактирования у меня есть функция beforeShowForm, которая создает элемент управления FlexBox,Элемент управления FlexBox имеет 2 поля: одно обычное и одно скрытое.Скрытый содержит код, а нормальный содержит / показывает значение.

Функция myCustomValue выглядит следующим образом:

function myCustomValue (elem, action, val) {
      var value = val, code = val;
      if(action == 'get') {
         code = $('input[id="' + $(elem).attr('id') + '_div_hidden"]').val();
         value = $('input[id="' + $(elem).attr('id') + '_div_input"]').val();
      }
      else {
         $('input[id="' + $(elem).attr('id') + '_div_input"]').val(value);
      }
      return (code == value ? value : code + '||' + value);
}

Таким образом, в основном он получает код и значение и возвращает их какпара, разделенная '||'(просто пользовательский разделитель).

Мой пользовательский форматтер выглядит так:

function myFormatter(cellvalue, options, rowdata, action) {
   if(cellvalue == '')
      return cellvalue;
   var codeValuePair = cellvalue.split('||');
   if(codeValuePair && codeValuePair.length > 1)
      // I use a hidden span to store the code because otherwise I lose the code!!!
      // This is where the problem starts! If I just return codeValuePair[1] (description)
      // I lose the code forever!
      return '<span class="md-flexbox-code" style="display:none;">' + codeValuePair[0] + '</span>' + codeValuePair[1];
   else
      return cellvalue;
}

, и средство неформатирования проверяет, есть ли диапазон со скрытым кодом, и если он есть, то онвозвращает это.

Я что-то упустил?Для меня форматер должен быть просто способом показа данных, а не их изменения!

1 Ответ

0 голосов
/ 27 января 2011

Я не пользуюсь FlexBox лично.На первый взгляд, чтобы использовать его в jqGrid, вам нужно просто использовать

editoptions: {
    dataInit : function (elem) {
        $(elem).flexbox(/*flexbox parameters which you need*/);
    }
}

в соответствующем определении столбца.Но, вероятно, я что-то упускаю.

Какой метод вы используете для получения локальных данных из сетки?Вы используете локальную передачу данных?Вероятно, у вас есть близкие проблемы, как в вопросе ?

Форматер действительно предназначен только для отображения значений в качестве элемента управления внутри сетки, а неформатор - для чтения данных из ячейки.Для изменения данных в вашем случае важна правильная реализация custom_value.Значение, возвращаемое вашим myCustomValue, будет сохранено в сетке.

Если у вас по-прежнему возникает проблема, вам следует добавить свой вопрос с большим количеством кода.

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