我的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是否存在,如果是,则返回该值。
我错过了什么吗?对我来说,格式化程序应该只是显示数据的一种方式,而不是修改它!
答案 0 :(得分:0)
我不是亲自使用FlexBox。首先在jqGrid中使用它,你只需要我们
editoptions: {
dataInit : function (elem) {
$(elem).flexbox(/*flexbox parameters which you need*/);
}
}
在相应的列定义中。但我可能会错过一些东西。
您使用哪种方法从网格中获取本地数据?你使用本地数据分页吗?可能你有the question中的问题?
格式化程序实际上只是将值显示为网格内的控件而unformatter是从单元格中读取数据。对于修改案例中的数据,custom_value
的正确实现很重要。您myCustomValue
返回的值将保存在网格中。
你继续遇到问题,你应该用更多的代码附上你的问题。