Поле отношения формата jqGrid в процентах

Мой код сервера передает некоторый столбец в качестве значения отношения, от 0.0 до 1.0. Мне нужно отформатировать и отредактировать его как процент. Я хотел бы сделать это на стороне JavaScript, не изменяя серверную сторону. Поэтому, если я добавляю пользовательский форматтер, чтобы просто умножить значение на 100, дисплей работает, как ожидалось. Более того, когда я нажимаю кнопку редактирования, inline edit box также отображает значение в процентах. Проблема начинается, когда я сохраняю – значение преобразуется вместе с форматированием еще раз , давая мне такие вещи, как 10000. Так что хорошо, мне нужна симметрия здесь, поэтому я создаю unformatter, который просто делит значение на 100. Но это тоже не работает – теперь управление редактированием отображает его как отношение, которое не то, что я хотел (хотя сохранение теперь работает правильно).

Есть ли способ обойтись без изменения кода сервера?

Вы можете пропустить unformatter в пользу настраиваемого типа редактирования, просто используйте это в своем colModel :

 { ..., edittype: 'custom', editoptions: { custom_element: function(value, options) { return $(''); }, custom_value: function(element){ return parseFloat(element.val())/100; } }} 

Чтобы иметь полную поддержку вашего типа данных типа 0.0 до 1.0, отображаемого как процентное значение, включающее в себя редактирование и поиск, вам необходимо реализовать:

  1. реализовать formatter для отображения данных в сетке по-своему.
  2. реализовать unformat чтобы обеспечить доступ к данным из своего «визуального представления». Метод будет использоваться jqGrid в некоторых ситуациях (например, во время фазы инициализации редактирования формы).
  3. определите sorttype , который может быть некоторым совместимым типом данных, например 'number' или вашей пользовательской функцией сортировки.
  4. используйте edittype: 'custom' и реализуйте custom_element и custom_value editoptions (см. документацию ).
  5. используйте stype: 'custom' и реализуйте custom_element и custom_value editoptions .

В некоторых ситуациях один из шагов можно пропустить, но в общем случае вам нужно подумать о реализации всех шагов. Вы должны проверить, какие шаги сверху не реализованы в вашем решении.

Демонстрация – это модификация демо из старого ответа и другого ответа . Демонстрация не ориентирована на ваш прямой вопрос . Он показывает, почему и как можно реализовать пользовательский контроль в jqGrid. Функциональное редактирование формы работает не полностью в демо только из-за того, что серверная часть не реализована. При необходимости можно использовать подход из ответа, который показывает, как локальное редактирование формы может быть реализовано в jqGrid. Я не хотел делать код более сложным, как requiret, чтобы показать основную цель демонстрации.

Interesting Posts
Давайте будем гением компьютера.