AG Grid:验证行的更好方法-valueSetter?

时间:2018-10-08 21:27:56

标签: ag-grid ag-grid-valuesetter ag-grid-validation

ag-grid中验证行是否比在valueSetter中验证行更好?

我可以用它来完成验证,但是我不确定是否有更好的方法。

https://www.ag-grid.com/javascript-grid-value-setters/#properties-for-setters-and-parsers

我要验证行中的两个字段。 DateFrom和DateUntil(不允许为null,DateFrom必须小于DateUntil)。

3 个答案:

答案 0 :(得分:4)

您可以覆盖valueSetter,而是调用grid api事务更新。

这里是伪代码,显示了如何实现此目标。

valueSetter: params => {
  validate(params.newValue, onSuccess, onFail);
  return false;
};

validate = (newvalue, success, fail) => {
  if (isValid(newValue)) {
    success();
  } else {
    fail();
  }
};

onSuccess = () => {
  // do transaction update to update the cell with the new value
};

onFail = () => {
  // update some meta data property that highlights the cell signalling that the value has failed to validate
};

这样,您还可以执行异步验证。 这是一个异步值设置器的真实示例,该设置成功,失败,并且在验证完成后验证进行事务更新的处理程序。

const asyncValidator = (
  newValue,
  validateFn,
  onWhileValidating,
  onSuccess,
  _onFail
) => {
  onWhileValidating();
  setTimeout(function() {
    if (validateFn(newValue)) {
      onSuccess();
    } else {
      _onFail();
    }
  }, 1000);
};

const _onWhileValidating = params => () => {
  let data = params.data;
  let field = params.colDef.field;

  data[field] = {
    ...data[field],
    isValidating: true
  };
  params.api.applyTransaction({ update: [data] });
};

const _onSuccess = params => () => {
  let data = params.data;
  let field = params.colDef.field;

  data[field] = {
    ...data[field],
    isValidating: false,
    lastValidation: true,
    value: params.newValue
  };
  params.api.applyTransaction({ update: [data] });
};

const _onFail = params => () => {
  let data = params.data;
  let field = params.colDef.field;

  data[field] = {
    ...data[field],
    isValidating: false,
    lastValidation: params.newValue
  };
  params.api.applyTransaction({ update: [data] });
};

const asyncValidateValueSetter = validateFn => params => {
  asyncValidator(
    params.newValue,
    validateFn,
    _onWhileValidating(params),
    _onSuccess(params),
    _onFail(params)
  );
  return false;
};

下面是一个代码运行器示例,演示了此操作:https://stackblitz.com/edit/async-validation-ag-grid-final

答案 1 :(得分:2)

有两种可能的验证处理方式:

首先:通过ValueSetter函数

第二:通过自定义cellEditor组件

我建议最好在自定义components之间划分逻辑,但是正如您所说的,您需要在它们之间验证两个单元格值。

从用户界面的角度来看,在这种情况下,您可以尝试将它们合并到一个单元格中,并且仅通过一个组件即可轻松地使用值。

答案 2 :(得分:1)

看看这两个片段,它们来自我们的内部知识库(客户可以访问)

在“ A(必需)”列中编辑值时,您将看到它不允许将其保留为空。如果将其保留为空并返回编辑,它将被取消。

//Force Cell to require a value when finished editing

https://plnkr.co/edit/GFgb4v7P8YCW1PxJwGTx?p=preview

在此示例中,我们使用“自定义单元格编辑器”,该编辑器还将根据6个字符长的规则来验证值。编辑时,如果修改的值不能超过6个字符,它将显示为红色,并且当您停止编辑该行时,该值将被重置,因此只有在该值有效的情况下,它才接受完整的编辑。

//Inline Validation while editing a cell 

https://plnkr.co/edit/dAAU8yLMnR8dm4vNEa9T?p=preview