2017-03-01 46 views
3

比方说,我有一个计算属性取决于其他属性。我怎样才能找出哪些更改的依赖属性触发器重新计算我的财产。除此之外,是否有任何方法来调试计算链?如何调试emberjs计算属性

+0

我想有没有简单的方法,您可能需要使用getter和setter的计算属性,并与您以前的值进行比较 – kumkanillam

+0

我查看源代码以查看是否有任何我们可以从中受益的未公开的功能;但没有运气。可能你可以在呃讨论中提问,核心团队的成员应该给出适当的答案。我相信你没有机会只能依靠观察者而不是计算属性来了解变化的属性。祝你好运。 – alptugd

回答

0

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

+0

“notifyPropertyChange”被认为是私有API。我不会鼓励它的使用。这是一种气味;它的用法通常意味着代码需要重构。 此外,它不回答问题。 – givanse

0

如果您的计算属性在组件中,您可以尝试挂钩didUpdateAttrs挂钩。 didUpdateAttrs当传入组件的值更新时触发。在didUpdateAttrs中,您可以通过比较旧/新值来查看哪些attrs发生了变化。

didUpdateAttrs: function(attrs) { 
    // attrs should have access to the old/new values 

    } 

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

当组件的属性在模型中有变化,但 不当部件被重新呈现时,通过component.rerender, component.set,或改变

didUpdateAttrs运行或模板使用的服务。

在重新渲染之前调用了didUpdateAttrs,当特定属性发生更改时,可以使用此钩子执行代码 。该钩子可以是观察者的有效替代品,因为它将在重新渲染之前但在属性发生变化之后运行。

这种情况的实例是配置文件编辑器组件。 由于您正在编辑一个用户,并且用户属性发生更改,因此您可以使用didUpdateAttrs清除编辑前一个用户时从 构建的任何错误状态。

+0

只要注意在生命周期钩子方法中使用'attrs'已弃用 – kumkanillam