如何调试EmberJS计算属性

3

假设我有一个计算属性,它依赖于其他属性。如何找出哪个依赖属性的更改会触发我的属性重新计算。除此之外,还有没有办法调试计算链?


我想没有简单的方法,你可能需要使用计算属性、Getter 和 Setter,并与之前的值进行比较。 - Ember Freak
我查看源代码,以便看看是否有任何未记录的功能可以让我们受益;但是没有运气。也许你可以在Ember讨论中询问,核心团队的某个人应该会给出一个合适的答案。我相信你别无选择,只能依靠观察者而不是计算属性来了解属性的变化。祝你好运。 - feanor07
3个回答

0

检查属性是否由 notifyPropertyChange() 方法触发。您可以使用 notifyPropertyChange() 方法来触发计算属性。


好一段时间以来,notifyPropertyChange 被认为是私有 API。我不鼓励它的使用。这样做会让代码出现异味;通常意味着需要重构代码。另外,它并不能回答问题。 - givanse

0

0
如果您的计算属性位于组件中,可以尝试钩入didUpdateAttrs钩子。当传递给组件的值更新时,didUpdateAttrs会触发。在didUpdateAttrs中,您可以通过比较旧值和新值来检查哪些属性已更改。
  didUpdateAttrs: function(attrs) {
    // attrs should have access to the old/new values

  }

https://guides.emberjs.com/v2.6.0/components/the-component-lifecycle/

didUpdateAttrs 是在组件属性变化时运行的,但不是在通过 component.rerender、component.set 或模板使用的模型或服务的更改时重新渲染组件时运行的。 didUpdateAttrs 在重新渲染之前被调用,您可以使用此钩子来执行特定属性更改时的代码。这个钩子可以是观察者的有效替代方案,因为它将在重新渲染之前但属性更改后运行。 此场景中的一个示例就是个人资料编辑器组件。当你正在编辑一个用户,用户属性发生变化时,你可以使用 didUpdateAttrs 来清除从编辑上一个用户生成的任何错误状态。

仅需注意在生命周期钩子方法中使用 attrs 已被弃用。 - Ember Freak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接