cfgrid не работает после обновления с Coldfusion 11 до Coldfusion 2018 - PullRequest
4 голосов
/ 28 марта 2019

После обновления с 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' и отправляю, я получаю следующий дамп: введите описание изображения здесь

Как вы можете видеть, он думает, что 'peter' был введен как имя и фамилия, и также думает, что 'peter' был исходным именем.

Когда я изменяю любое из полей во втором столбце, я получаю следующую ошибку javascript в консоли:

Ошибка типа: _dd.values ​​[_de] не определена.

Ошибка выдается cfgrid.js

Если я отправляю только изменение во втором столбце, дамп будет полностью пустым.

Кажется, что cfgrid смешивает столбцы или что-то в этом роде.

Ваши мысли?

1 Ответ

2 голосов
/ 29 марта 2019

В конечном счете, решение здесь состоит в том, чтобы отойти от реализации ColdFusion <cfgrid> и развернуть свой собственный пользовательский интерфейс grid или ... дождаться исправления от Adobe.

Это определенно ошибка в ColdFusion, ошибка, которую вы видите, это, в частности, ошибка в функции ColdFusion.Grid.Actions.afterEdit()

Я потратил немного времени на возня с JS, созданным с помощью <cfgrid> и обнаружил, что они неправильно индексируют столбцы

Вы можете переопределить реализацию 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) НЕ поддерживает этот тег

...