请参考以下小提琴: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 关联。
我希望这对一些读者有所帮助。