2

请参考以下小提琴:http ://www.senchafiddle.com/#xXQlp 确保打开控制台以查看显示错误数据的输出。

在这里你可以看到我正在创建 2 个学生模型,每个模型都有一个 0+ 奖励模型的列表。Dave 获得了 2 个相当不错的奖项 - 不足为奇 :) - 而 Chaz 获得了 2 个不太好的奖项。问题是日志显示事实上 Chaz 最终获得了 4 个奖项(2 个好的,以及 2 个坏的)。

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

出于我希望显而易见的原因,这不是我满意的解决方法。一定是我在协会做错了什么,才能让 Chaz 获得所有 4 个奖项。……肯定吗?

干杯!

更新:接受下面的答案,删除 autoLoad:true 可以解决问题。但是我想要 autoLoad,所以我在 Student 模型的 init 中实现了以下内容:

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 关联。

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

4

1 回答 1

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

于 2012-05-31T17:25:55.063 回答