Validation 组件验证余烬验证

Validation 组件验证余烬验证,validation,ember.js,coffeescript,ember-validations,Validation,Ember.js,Coffeescript,Ember Validations,我尝试使用ember validations验证单个组件中的字段,但允许将validations对象传递给组件,而不是在组件内部硬编码。此代码: EditDefaultPropertyComponent = Ember.Component.extend EmberValidations.Mixin, validations: value: numericality: true onValueObserver: Ember.observer('value', -> @va

我尝试使用ember validations验证单个组件中的字段,但允许将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: (->
    @setProperties(
        ...
        @set 'validations', Ember.copy ( { value: { numericality: true }}))
).on('init')
不行。无论输入是什么,它都会打印“good”。如果我访问

console.log (@get 'validations')
@validate方法的then()分支中,它显示了对象。
我是否缺少一些控制流程?

好的,我已经知道答案,但我不知道如何克服它。我会把它放在这里,以防有人发现

添加到组件的EmberValidations.Mixin包含一个init方法,该方法将检查是否定义了任何validations对象,并将向其每个属性添加一个观察者。 该代码在组件的init函数之前运行,因此,当在组件中修改validations对象时,观察者已经根据之前遇到的mixin值进行了设置。

确定,已解决

您可以在mixin中定义一个init方法,该方法将覆盖它自己的init方法,运行一些代码,然后调用super()构造函数

init: ->
  ...
  @_super()