【问题标题】:emberjs - dynamic computed property does not trigger classNameBindingsemberjs - 动态计算属性不会触发 classNameBindings
【发布时间】:2015-03-16 17:19:01
【问题描述】:

我正在创建一个 mixin 来验证带有 texFields 的组件,它看起来像这样,我正在使用 Ember.defineProperty 使用动态相关键动态创建一个 cp:

App.ValidationMixin = Ember.Mixin.create
  classNameBindings: ['isInvalid']

  input: (e) ->
    @_super.apply this, arguments

  setup: Ember.on 'didInsertElement', ->
    unless validations = @get('validations')

    el = @autocompleteElement()

    # I had to add this to access the prop rather than it getting
    # triggered when the dynamic property changes
    if @get('isInvalid')
      el.addClass 'is-invalid'
    else
      el.removeClass 'is-invalid'

  validationMixin: Ember.on 'didInsertElement', ->
    unless validations = @get('validations')
      return

    dynamicProperty = # logic to determine dynamic property

    Ember.defineProperty this, 'isInvalid', Ember.computed dynamicProperty, 'validator.isSubmitted', ->
      # validation logic

问题是,我必须手动检查this.get('isInvalid'),而不是在依赖键之一更改时执行的属性函数。

谁能解释这是为什么?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    Ember 可能认为属性 'isInvalid' 没有在任何地方使用,因此不会更新它。我猜想在 classNameBindings 属性之后调用 'didInsertElement'...尝试在模板中输出 'isInvalid' 属性以检查是否是这种情况,因为因此必须更新它。

    【讨论】:

    • 将 defineProperty 移至 Ember.on('init' 使其完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多