2016-06-24 49 views
0

我從計算屬性返回數組時遇到了這個奇怪的問題。我完全知道這個問題(如下),但不知道解決方案。創建了一個演示目的來解釋的旋轉。ember js - 從計算屬性返回的值看起來緩存

案例1https://ember-twiddle.com/9910dfea25b6fc4791e3920acca2558d?openFiles=controllers.application.js%2C

步驟:

一)檢查的第一個複選框,如果我們看到的「改編」,在控制檯中的值時,「newprop」屬性將被添加到每個對象in「arr」

b)取消選擇相同的複選框,查看控制檯,同樣的「arr」會以「newprop」仍然返回。 但我假設,它不會在那裏,因爲如果條件有檢查。

所以,經過一些故障排除後,我想出了這個相同的下一個旋轉。

案例2https://ember-twiddle.com/735750b0a41c4bf87841bc79c6163259?openFiles=controllers.application.js%2C

執行相同的步驟,我們看到,這一次的「改編」沒有「newprop」當複選框取消選中

只是玩弄之間的區別是第一個數組(具有數據/模型)是在「getData」本身中定義的,第二個是從另一個計算屬性「what」中獲取的。

我在找什麼:我需要有案例1的旋轉工作,但是當複選框未被選中時,「arr」應該返回沒有「newprop」的實際原始「arr」。 另外,需要了解爲什麼會發生。唯一改變的是直接在fn中或通過另一個計算屬性獲取數據。

回答

1

這是計算屬性的主要目的。他們改變,如果他們是從屬關鍵的變化。在情況2中,你總是重新定義你的數組。在情況1中,您每次調用都訪問相同的數組。

在情況1中,您可以在屬性列表中添加一個相關鍵。

what: function(){ 
    var arr = [ 
     { 
     a:"b", 
     c: [ 
      {key:"1"},{key:"2"} 
     ] 
     }, 
     { 
     a:"f", 
     c: [ 
      {key:"1"},{key:"1"} 
     ] 
     } 
    ]; 
    return arr; 
    }.property('filterSet'), // see here 

這將再生您的數組屬性filterSet變化時。

編輯:

proof

+0

但我已經給 「filterSet」 作爲一個依賴於 「的getData」 屬性,是不是正確的。這是爲了確保每當filterSet發生更改時調用getData。如果這是正確的,getData總是獲取「what」屬性,因爲this.get('what')應該始終將其取回爲原始數據。請糾正我,如果錯誤 – whyAto8

+0

你做了這個在旋轉?因爲它沒有改變案例1中的問題,在旋轉中。 – Craicerjack

+1

@Craicerjack是的,我改變了旋轉中的代碼,它在控制檯顯示了我想要的結果。 – Timm