Функция init () AgGrid Cell Renderer вызывается дважды в onCellValueChanged (), вызывается только один раз - PullRequest
0 голосов
/ 21 октября 2019

Я использую AgGrid версию 18.1.0 и Angular 8.

Я пытаюсь выполнить некоторую базовую проверку Cell Renderer, но тот факт, что вызывается функция init()дважды каждый раз, когда вызывается onCellValueChanged(), это нарушает мою логику проверок.

FUN FACT: init() вызывается только один раз, если значение, которое вы вводите в редактируемую ячейку, является одним и тем же значением (ПРИМЕР: 123 ---> 123), но дважды, если значение отличается от значениятекущее значение (ПРИМЕР: 123 ---> 321).

Как решить эту проблему, чтобы функция init() вызывалась только один раз?

Параметры моей сетки ...

this.agGridOptions = {
  onGridReady: (grid) => this.onGridReady(grid),
  onCellValueChanged: (grid) => this.updateRowItem(grid),
  enableSorting: false,
  enableFilter: false,
  enableColResize: true,
  unSortIcon: true,
  components : {
    'parameterValueValidator'             : ParameterValueValidator
  }
};

Моя onCellValueChanged() функция ...

private onGridReady(grid) {
    this.grid = grid;
    this.gridColumnApi = grid.columnApi;
    this.grid.api.sizeColumnsToFit();
}

Мое определение сетки для компонента ...

{
    headerName: 'Value',
    field: 'paramaterValue',
    width: 500,
    editable: true,
    cellRenderer: 'parameterValueValidator'
  },

Вот мой компонент Cell Renderer ...

import * as moment from 'moment';

export class ParameterValueValidator {
  public eGui: any;
  public getGui() {
    return this.eGui;
  }

  public init(params) {
    this.eGui = document.createElement('div');
    const dataType = (params.data.parameterDataType.toLowerCase());
    const valuesDataType = this.determineDataType(params.data.paramaterValue, dataType);

    if (params.data.paramaterValue === '') {
      this.eGui.innerHTML = '<p><font size="1" color="red">* Required field </font></p>';
    } else if (valuesDataType !== dataType && dataType !== '') {
      this.eGui.innerHTML = '<p><font size="1" color="red" class="data-type-mismatch">* Data type "' + dataType + '" does not match value type "' + valuesDataType + '"</font></p>';
      params.data.paramaterValue = '';
    } else {
      this.eGui.innerHTML = params.data.paramaterValue;
    }
  }
}
...