2012-05-31 21 views
2

請參考以下提琴:http://www.senchafiddle.com/#xXQlp 確保打開控制檯以查看顯示錯誤數據的輸出。Sencha touch 2型號關聯存儲不正確的數據存儲

在這裏您可以看到我創建了2個學生模型,每個模型都有一個0+獎勵模型的列表。戴夫獲得了2個相當不錯的獎項 - 毫不奇怪:) - 而查茲已經增加了2項不太好的獎項。問題在於測井表明Chaz最終獲得了4個獎項(2個好的和2個壞的)。

這個小提琴是一個大得多的應用程序的嚴重沸騰,但我已經孤立這個作爲我一直有一個巨大的問題的起源 - 我甚至找到了一個'修復'它。如果你從小提琴上取消了第55和56行的註釋並再次運行(一定要清除你的本地存儲!),你會發現Chaz只需要2個獎項。

由於我希望很明顯的原因,這不是一個我很滿意的解決方案。還有其他一些我做錯了與協會導致Chaz獲得全部4個獎項。 ...當然?

乾杯!

更新:接受下面的答案,刪除autoLoad:true修復了問題。我想AUTOLOAD不過,所以我實現在學生模型的初始化如下:

for (var i=0, l=this.associations.all.length; i<l; i++) { 
    var assoc = this.associations.all[i]; 
    if (assoc._type == "hasmany") { 
     var assocName = assoc._name; 
     var getterName = 'get' + assocName.charAt(0).toUpperCase() + assocName.slice(1); 
     this[getterName] = function(assocName) { 
      var self = this; 
      return function() { 
       var store = self[assocName](); 
       if (!store.isLoaded()) { 
        store.load(); 
       } 
       return store; 
      } 
     }.call(this, assocName) 
    } 
} 

這增加了對學生有各自的hasMany關聯一個getter,並確保該協會商店在返回之前加載它。即我現在可以使用student1.getAwards()而不是student1.awards()來訪問student1的獎勵,並且知道獎勵將會被加載,這將自動適用於我添加到模型中的任何其他hasMany關聯。

我希望這有助於一些讀者。

回答

2

不自動加載獎勵將解決此問題,取消對學生的autoload: true >>獎項有許多關聯。我不完全理解爲什麼自動加載該獎項打破了東西,雖然,但這個論壇主題表明,它是一個錯誤:http://www.sencha.com/forum/showthread.php?195371-autloaded-associations-don-t-properly-filter-data-from-a-JSON-proxy

你的榜樣工作:http://www.senchafiddle.com/#xXQlp#S3Af0

+0

感謝發現,它解決了這一問題,但沒有自動加載是一個煩惱,所以我做了我已經添加到我的問題的工作。乾杯。 –

相關問題