2017-03-01 72 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