javascript - jqGrid格式化程序修改原始数据?

标签 javascript jquery jquery-plugins jqgrid

我的 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;
}

取消格式化程序会检查包含隐藏代码的范围是否存在,如果存在,则返回该范围。

我错过了什么吗?对我来说,格式化程序应该只是显示数据的一种方式,而不是修改它!

最佳答案

我没有使用FlexBox亲自。第一次在 jqGrid 中使用它时,您只需要我们

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

在相应的列定义中。但可能我错过了一些东西。

您使用哪种方法从网格获取本地数据?您使用本地数据分页吗?可能您遇到了类似 the question 中的问题。 ?

格式化程序实际上只是将值显示为网格内的控件,而取消格式化程序则是从单元格中读取数据。对于修改您案例中的数据,正确实现 custom_value 非常重要。 myCustomValue 返回的值将保存在网格中。

如果问题仍然存在,您应该在问题中附加更多代码。

关于javascript - jqGrid格式化程序修改原始数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819889/

相关文章:

javascript - 如何通过 AngularJs 中的函数传播不断变化的范围变量?

javascript - jquery 发布表单不起作用

javascript - 如何使用 javascript 执行 wp 中现有的短代码

jQuery Validate,如何根据条件从自定义函数给出自定义错误?

javascript - jquery ajax 发布被取消

javascript - 将 html block 作为参数传递

Jquery 图标飞入动画效果 onload

javascript - HTML 5/JS 中获取 Canvas 对象位置并 move 到 Canvas 触摸位置

jquery - 访问 jQuery 插件数据

javascript - jquery fluid_dg slider 设置 设置幻灯片