【问题标题】:ember js component observer does not workember js组件观察器不起作用
【发布时间】:2015-03-04 08:19:59
【问题描述】:

我在 emberjs 组件中有一个场景,其中观察没有被击中。我想出原因为 "设置被观察的组件属性时,组件尚未插入。"

我的问题是,这可以在 ember js 中以更好的方式处理吗?

可以在下面的 jsbin 中找到更好的解释。

Not working Scenario

Working scenario

【问题讨论】:

  • 你到底想在这里完成什么?在这种情况下,两个观察者函数都可以更好地用作计算属性(通过Ember.Computed)。
  • 同意,观察者在这两种情况下都是矫枉过正
  • 就像我在 cmets 中提到的,这是一个示例,而不是实际用例。实际用例是一个巨大的用例,我想将其简单化。基本上,观察者中有很多计算,而不仅仅是将其分配给另一个属性此外,当您说“两个观察者函数都可以更好地用作计算属性”时,如果您在组件中使用计算属性,则由于相同,它不会工作观察者不工作的原因
  • 你需要问自己的问题是,我为什么要计算一些不会被使用的东西。如果要使用,为什么我不使用计算属性?
  • @Kingpin2k 可能是我没有正确理解您的观点,但我觉得我也没有很好地解释。所述示例只是一个示例,而不是我最终得到的实际用例!我正在计算正在使用的东西,但我正在计算不止一个。由于我计算的不止一个,我觉得使用观察者比使用计算属性更好!

标签: javascript ember.js observers


【解决方案1】:

您可以指定.on('init') 强制观察者在初始化后立即运行;否则就像提到的@Kingpin2k - 他们不运行

App.TextboxDisplayComponent = Ember.Component.extend({
  displayText: '',        

  boundProperty: '',

  observeBoundProperty: function () {
    this.set('displayText', this.get('boundProperty'));        
  }.observes('boundProperty').on('init')
});

您的(非)工作示例here

【讨论】:

  • 正是我想要的谢谢当我尝试这个时,我认为观察者只会被击中“on('init')”并且不会在通常的变化发生时被击中。现在我测试了它,即使有变化也会发生
  • 但是我刚刚意识到为什么我之前也没有使用这个概念,但有一个问题!即使 boundProperty 没有更改,observeBoundProperty 也会在 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
  • 1970-01-01
相关资源
最近更新 更多