У меня есть поле / столбец в моем 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;
}
, и средство неформатирования проверяет, есть ли диапазон со скрытым кодом, и если он есть, то онвозвращает это.
Я что-то упустил?Для меня форматер должен быть просто способом показа данных, а не их изменения!