请参考以下提琴: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关联。
我希望这有助于一些读者。
感谢发现,它解决了这一问题,但没有自动加载是一个烦恼,所以我做了我已经添加到我的问题的工作。干杯。 –