【问题标题】:Component validation Ember-Validations组件验证 Ember-Validations
【发布时间】:2016-04-18 10:08:34
【问题描述】:

我正在尝试使用 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')

可以正常工作,但是如果我想在组件的初始化时设置 validations 对象,该对象带有一些作为参数传递给组件的任意验证,例如在 setupFlags强>:

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

行不通。无论输入如何,它都将始终打印“好”。如果我访问

console.log (@get 'validations')

@validate 方法的 then() 分支内,它显示了对象。 我在这里错过了一些控制流程吗?

【问题讨论】:

    标签: validation ember.js coffeescript ember-validations


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      好的,解决了。

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

      init: ->
        ...
        @_super()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2020-02-12
        • 2012-08-19
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 2020-05-09
        相关资源
        最近更新 更多