首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组件验证Ember验证

组件验证Ember验证
EN

Stack Overflow用户
提问于 2016-01-13 12:21:35
回答 2查看 529关注 0票数 0

我试图使用ember-validations在单个组件中验证字段,但提供了将验证对象传递给组件而不是在组件内部硬编码的可能性。此代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
  setupFlags: (->
    @setProperties(
        ...
        @set 'validations', Ember.copy ( { value: { numericality: true }}))
).on('init')

不起作用。它总是打印“好”,无论输入。如果我能

代码语言:javascript
复制
console.log (@get 'validations')

然而,在@validate方法的()分支中,它显示了对象。我是不是错过了控制流程?

EN

回答 2

Stack Overflow用户

发布于 2016-01-13 12:32:17

好吧,我已经知道答案了,但我不知道如何克服它。如果有人发现了,我就把它放在这里。

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

票数 0
EN

Stack Overflow用户

发布于 2016-01-15 08:18:42

好了解决了。

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

代码语言:javascript
复制
init: ->
  ...
  @_super()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34766609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档