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

时间:2011-01-27 17:47:01

标签: javascript jquery jquery-plugins jqgrid

我的jqGrid中有一个字段/列,它从FlexBox(http://www.fairwaytech.com/flexbox)控件获取其值。我使用表单在本地编辑/添加数据到网格,然后我将整个数据作为一个整体提交给服务器。我已经在我的表单中实现了FlexBox控件作为自定义控件,完成了控件创建,获取值等功能。(editoptions:{custom_element:myCustomElem,custom_value:myCustomValue,...)

所以,我有一个代码/值对(很像普通的HTML选择),在网格中我想显示值,但我想将代码发送到服务器。当我从服务器加载数据时,我得到代码/值对。

所以我试着编写一个自定义格式化程序/ unformatter,但却发现格式化程序似乎不可逆转地修改了原始数据!因此,一旦我从格式化程序返回值(即在网格单元格中显示数据时),代码就会丢失!因此,当调用unformatter时(即将数据发送到服务器时)代码不再存在!

使用以下选项设置网格:

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

在我的navGrid选项中添加/编辑我有一个构造FlexBox控件的beforeShowForm函数。 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;
}

并且unformatter检查带有隐藏代码的span是否存在,如果是,则返回该值。

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

1 个答案:

答案 0 :(得分:0)

我不是亲自使用FlexBox。首先在jqGrid中使用它,你只需要我们

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

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

您使用哪种方法从网格中获取本地数据?你使用本地数据分页吗?可能你有the question中的问题?

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

你继续遇到问题,你应该用更多的代码附上你的问题。