emberjs - 动态计算属性不会触发classNameBindings

时间:2015-03-16 17:19:01

标签: ember.js

我正在使用texField创建一个mixin来验证组件,我使用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'),而不是在其中一个相关键发生变化时执行的属性函数。

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

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