【问题标题】:jqGrid - format ratio field as percent valuejqGrid - 将比率字段格式化为百分比值
【发布时间】:2012-10-05 09:43:00
【问题描述】:
我的服务器代码将某些列作为比率值传输,0.0 到 1.0。我需要格式化并将其编辑为百分比。我想在 JavaScript 端做,而不修改服务器端。因此,如果我添加一个自定义格式化程序以将值乘以 100,则显示按预期工作。此外,当我点击编辑按钮时,内联编辑框也会以百分比显示值。当我保存时,麻烦就开始了——值被格式化器再转换一次,给了我 10000 之类的东西。好吧,我在这里需要对称,所以我创建了一个 unformatter,它只是将值除以 100。但这也不起作用 - 现在编辑控件将其显示为不是我想要的比率(尽管现在保存可以正常工作)。
有什么办法不改变服务器代码?
【问题讨论】:
标签:
jqgrid
percentage
formatter
【解决方案1】:
要完全支持您的自定义数据类型,例如 0.0 到 1.0 显示为百分比值(包括编辑和搜索),您必须实现:
- 实现
formatter以自定义方式显示网格中的数据。
- 实现
unformat 以允许从其“可视化表示”访问数据。 jqGrid 在某些情况下(例如在表单编辑的初始化阶段)会使用该方法。
- 定义
sorttype,它可以是一些兼容类型的数据,例如'number' 或您的自定义排序函数。
- 使用
edittype: 'custom' 并实现custom_element 和custom_value 的editoptions(参见the documentation)。
- 使用
stype: 'custom' 并实现custom_element 和custom_value 的editoptions。
在某些情况下,可能会跳过其中一个步骤,但在常见情况下,您必须考虑实施所有步骤。您应该验证上述哪些步骤仍未在您的解决方案中实施。
The demo是对the old answer和another answer的demo的修改。该演示不是针对您的直接问题。它仅显示了 为什么 和 如何 在 jqGrid 中完全实现自定义控件。表单编辑的功能在演示中并不完整,只是因为没有实现服务器部分。如果需要,可以使用the answer 中的方法,该方法显示了如何在 jqGrid 中实现本地表单编辑。我不想让代码更复杂,以显示演示的主要目的。
【解决方案2】:
您可以跳过 unformatter 以支持 custom 编辑类型,只需在您的 colModel 中使用它:
{ ..., edittype: 'custom', editoptions: { custom_element: function(value, options) { return $('<input type="text" value="' + value + '"/>'); }, custom_value: function(element){ return parseFloat(element.val())/100; } }}