煎茶触摸 2 模型关联保存不正确的数据进行存储

Sencha touch 2 model association saving incorrect data to store

本文关键字:数据 存储 不正确 保存 触摸 模型 关联      更新时间:2023-09-26

请参考以下小提琴: http://www.senchafiddle.com/#xXQlp请务必打开主机以查看显示错误数据的输出。

在这里,您可以看到我正在创建 2 个学生模型,每个模型都有一个 0+ 奖项模型列表。 戴夫获得了 2 个相当不错的奖项——不出所料:)——而查兹则增加了 2 个不太好的奖项。 问题是日志记录显示事实上 Chaz 最终获得了 4 个奖项(2 个好奖项,以及 2 个坏奖项)。

这个小提琴是一个更大的应用程序的严重归结,但我已经将其隔离为我一直遇到的一个巨大问题的根源 - 我什至找到了它的"修复"。 如果您取消注释小提琴中的第 55 行和第 56 行并再次运行它(请务必清除您的本地存储!),您将看到 Chaz 只需要 2 个他应该获得的奖项。

出于我希望显而易见的原因,这不是我满意的修复程序。 一定是我做错了什么,导致查兹获得了所有4个奖项。 ...肯定?

干杯!

更新:下面的答案被接受,删除自动加载:真可以解决问题。 但是,我想要自动加载,所以我在学生模型的初始化中实现了以下内容:

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() 访问学生 1 的奖励,并且知道奖励将被加载,这将自动适用于我添加到模型中的任何其他具有许多关联。

我希望这对一些读者有所帮助。

不自动加载奖励将解决此问题,删除学生>>奖项具有许多关联性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