Проверка компонентов 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()