ember-cp-validation не выполняется каждый раз, когда изменяются зависимые ключи

Позвольте мне рассказать о проблеме, с которой я столкнулся давным-давно и исправил сегодня.

Описание проблемы:

Валидатор не выполняется каждый раз, когда изменяются зависимые ключи.

Мой пользовательский валидатор, проверяющий уникальность пользовательских мета- ключей, определяется следующим образом:

import BaseValidator from 'ember-cp-validations/validators/base';
import Ember from 'ember';
const {isEqual} = Ember;

export default BaseValidator.extend({

  /**
   * Validates custom-metas of the {spot} model.
   * The validation leans upon duplicates detection of the 'key' property values.
   * @example:
   * spot.set('customMeta', [{key: 'duplicate'}, {key: 'duplicate'}]);
   * spot.get('validations.attrs.customMeta.isValid') -> false
   * spot.set('customMeta', [{key: 'unique 1'}, {key: 'unique 2'}]);
   * spot.get('validations.attrs.customMeta.isValid') -> true
   * ...skipping rest of the doc...
   */
  validate(value, options, spot) {

    const customMetaKeys = spot.get('customMeta').mapBy('key');

    if(isEqual(customMetaKeys.get('length'), customMetaKeys.uniq().get('length'))){
      return true;
    }

    return this.createErrorMessage('unique-custom-meta-keys', value, options);
  }

});

Валидатор был выполнен ровно дважды, хотя зависимые ключи менялись чаще. Я думал, что проблема может исходить от аддона или наблюдателя фрагментов модели, который был запущен в тех же условиях, что и другие функции.

Это была моя декларация проверки:

const Validations = buildValidations({
  customMeta: {
    description: 'Custom-metas',
    validators: [
      validator('unique-custom-meta-key', {
        dependentKeys: ['customMeta.@each.key'],
        debounce: 500
      })
    ]
  }
});

и определение модели:

export default Model.extend(Validations, {
  customMeta : fragmentArray('custom-meta')
});

1 ответ

Решение:

Посмотрев код проверки ember-cp, я заметил разницу в объявлении валидатора, который зависит от нескольких значений из коллекции:

dependentKeys: ['model.friends.@each.name']

Как видите, model Свойство в объявлении зависимых ключей добилось цели. В настоящее время их онлайн-документ также предоставляет правильное заявление, чего не было тогда, когда я впервые наткнулся на проблему.

dependentKeys: ['model.customMeta.@each.key'],

Очень глупая ошибка, но, возможно, эта тема спасет чей-то день;-)

Другие вопросы по тегам