2012-05-31 25 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

感谢发现,它解决了这一问题,但没有自动加载是一个烦恼,所以我做了我已经添加到我的问题的工作。干杯。 –

相关问题