从 CF11 升级到 CF2018 Update 3 后,我的可编辑cfgrids
都不起作用。当我进行编辑然后提交表单时,列似乎变得混乱。我创建了最简单的cfgrid
(下图(,但仍然得到相同的行为。
<cfif isDefined("form.submitname")>
<cfdump var="#form#">
<cfelse>
<cfform action="test.cfm" method="post" name="testform" id="testformId">
<cfinput type="Submit" name="submitname" id="submitid">
<cfgrid name="TestGrid" format="html" selectmode="edit">
<cfgridcolumn name="A">
<cfgridcolumn name="B">
<cfgridrow data="john,doe">
<cfgridrow data="steve,anon">
</cfgrid>
</cfform>
</cfif>
网格显示正确,但是我将"john"更改为"peter"并提交,我得到以下转储:在此处输入图像描述
如您所见,它认为"peter"是作为名字和姓氏输入的,并且它还认为"peter"是原始的名字。
当我修改第二列中的任何字段时,我在控制台中收到以下 javascript 错误:
类型错误: _dd.values[_de] 未定义。
错误由cfgrid.js
引发
如果我只提交第二列中的更改,则转储完全为空。
似乎 cfgrid 正在混淆列或其他东西。
你的想法?
最终的解决方案是摆脱 ColdFusion 的<cfgrid>
实现,并推出自己的网格 UI 或......等待来自Adobe的补丁。
这绝对是 ColdFusion 中的一个错误,您看到的错误是函数中的错误ColdFusion.Grid.Actions.afterEdit()
我花了一些时间摆弄用<cfgrid>
生成的JS,发现它们错误地索引到列中
您可以使用自己的ColdFusion.Grid.Actions.afterEdit()
覆盖 ColdFusion 的实现,以创建可能的解决方法(我在 Solaris 11.4 - Apache - ColdFusion 2018 上运行:更新 3 (
<Body>
<cfif isDefined("form.submitname")>
<cfdump var="#form#">
<cfelse>
<cfform action="test.cfm" method="post" name="testform" id="testformId">
<cfinput type="Submit" name="submitname" id="submitid">
<cfgrid name="TestGrid" format="html" selectmode="edit">
<cfgridcolumn name="A">
<cfgridcolumn name="B">
<cfgridrow data="john,doe">
<cfgridrow data="steve,anon">
</cfgrid>
</cfform>
</cfif>
<script>
ColdFusion.Grid.Actions.afterEdit = function(_d8, _d9, _da) {
var _db = _d9.value;
if (_db == this.editOldValue) {
return;
}
if (this.insertInProgress == false && this.onChangeFunction) {
this.onChangeHandler("U", this.selectedRow, _d9);
} else {
if (!this.dynamic) {
rowidx = _d9.rowIdx;
if (!rowidx && rowidx != 0) {
rowidx = _d9.row;
}
var _dc = ColdFusion.Grid.computeActualRow_editField(this.editFieldState, _d9.record.data.CFGRIDROWINDEX);
var _dd = this.editFieldState[_dc - 1];
var _de = _d9.colIdx;
if (!_de && _de != 0) {
_de = _d9.column;
}
_de = _de + 1;
if (_dd) {
if (this.multiRowSelection === true && this.insertInProgress == true) {
_de = _de - 1;
}
//-------------------------------------------------------------------
//Subtracted 1 from column index to correctly index array
//-------------------------------------------------------------------
_dd.values[_de -1][1] = _db;
} else {
var _df = this.grid.getStore().getById(_d9.record.data.CFGRIDROWINDEX);
_dd = ColdFusion.Grid.Actions.initEditState(this, "U", _df, _dc);
var _e0 = this.editOldValue + "";
if (_d9.column.type == "date") {
if (_e0 && typeof _e0 == "string") {
_e0 = new Date(_e0);
}
var _e1 = "F, j Y H:i:s";
if (_d9.column && _d9.column.format) {
_e1 = _d9.column.format;
}
_dd.values[_de][1] = Ext.Date.format(_db, _e1);
_dd.values[_de][0] = _e0 ? Ext.Date.format(_e0, _e1) : _e0;
} else {
//-------------------------------------------------------------------
//Subtracted 1 from column index to correctly index array
//-------------------------------------------------------------------
_dd.values[_de -1][0] = _e0;
_dd.values[_de -1][1] = _db;
}
}
ColdFusion.Grid.Actions.computeEditField(this);
}
}
this.editOldValue = null;
this.fireSelectionChangeEvent();
}
;
</script>
</BODY>
肯定有很多其他错误困扰着这个标签......绝对值得注意的是,Lucee(开源ColdFusion引擎(不支持此标签