我的 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/