coldfusion - 从 Coldfusion 11 升级到 Coldfusion 2018 后,cfgrid 不起作用

标签 coldfusion cfgrid coldfusion-2018

从 CF11 升级到 CF2018,更新 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' 并提交,我得到以下转储:
enter image description here

如您所见,它认为 'peter' 被输入为名字和姓氏,并且还认为 'peter' 是原始名字。

当我修改第二列中的任何字段时,我在控制台中收到以下 javascript 错误:

TypeError: _dd.values[_de] is undefined.



错误是由 cfgrid.js 抛出的

如果我仅在第二列中提交更改,则转储完全为空。

似乎 cfgrid 正在混淆列或其他东西。

你的意见?

最佳答案

最终,这里的解决方案是远离 ColdFusion 的 <cfgrid> 实现。并推出您自己的网格 UI 或...等待 Adob​​e 的补丁。

这绝对是 ColdFusion 中的一个错误,您看到的错误是函数 ColdFusion.Grid.Actions.afterEdit() 中的一个错误。

我花了一点时间摆弄 <cfgrid> 生成的 JS并发现他们错误地索引到列中

您可以覆盖 ColdFusion 对 ColdFusion.Grid.Actions.afterEdit() 的实现。用您自己的方法创建可能的解决方法(我在 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 引擎)不支持这个 tag

关于coldfusion - 从 Coldfusion 11 升级到 Coldfusion 2018 后,cfgrid 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55386519/

相关文章:

coldfusion - cfgrid boolean 列为是/否

coldfusion - ColdFusion 中 ROT13 上的魔数移除

coldfusion - 使用|| OR 在 Coldfusion if 语句中使用 isDefined

json - 在 ColdFusion MX7 中将 JSON 字符串转换为数组

css - 更改 CFGRID 的样式

coldfusion - 尽管“启用空支持”已关闭,但在 cf2018 中启用了空

sql - 选择 * 不返回所有列 - Coldfusion/SQL Server 2008

session - ColdFusion调用 session 函数

javascript - 如何将 JavaScript 和 CSS 文件放入浏览器缓存中?