Проверка компонентов Ember-Validations

Я пытаюсь проверить поле в одном компоненте, используя ember-validations, но давая возможность передать объект проверки компоненту вместо жесткого его кодирования внутри. Этот код:

EditDefaultPropertyComponent = Ember.Component.extend EmberValidations.Mixin,

validations:
  value:
    numericality: true

onValueObserver: Ember.observer('value', ->
  @validate()
    .then(() =>
      ...
      console.log 'good'
      @set 'error', null
    )
    .catch((err) =>
      ...
      console.log 'bad'
      @set 'error', err
    )
  )

setupFlags: (->
  ...
).on('init')

Будет работать нормально, но если я хочу настроить во время инициализации компонента объект валидации с некоторой произвольной валидацией, переданной компоненту как параметр, скажем, например, в setupFlags:

  setupFlags: (->
    @setProperties(
        ...
        @set 'validations', Ember.copy ( { value: { numericality: true }}))
).on('init')

Не сработает Он всегда будет печатать "хорошо" независимо от ввода. Если я получу доступ

console.log (@get 'validations')

внутри ветви then() метода @validate он показывает, однако, объект. Я пропускаю некоторый поток управления здесь?

2 ответа

Хорошо, я уже знаю ответ, но я не знаю, как его преодолеть. Я помещу это здесь в случае, если кто-то узнает это.

EmberValidations.Mixin, добавленный к компоненту, включает метод init, который проверит, определен ли какой-либо объект проверки, и добавит наблюдателя к каждому из его свойств. Этот код запускается перед функцией init компонента, следовательно, когда объект валидации изменяется в компоненте, наблюдатели уже настраиваются на значения, с которыми миксин встречался ранее.

Хорошо, решено.

Вы можете определить метод init в mixin, который будет переопределять свой собственный метод init, запускать некоторый код и затем вызывать конструктор super().

init: ->
  ...
  @_super()
Другие вопросы по тегам