煎茶触摸 2 模型关联保存不正确的数据进行存储
Sencha touch 2 model association saving incorrect data to store
请参考以下小提琴: 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
- 如何有效地将游戏数据存储在URL查询字符串中
- 将数据存储在javascript数组中以供进一步使用
- 将数据存储到元素中
- 如何将变量数据存储在其他变量中并对其进行解析
- 将新类实例中的数据存储在数组中
- 如何在Java Script中比较二维数组和一维数组,并将常见数据存储在另一个数组中
- 组合框是否需要数据存储
- 将动态feild数据存储到jquery-mobile和php-mysql中的数据库中
- 将数据存储在请求与请求中
- 将json数据存储在sqlite(phonegap应用程序)中
- 如何给$('inputs')每个函数,以将数据存储为 asp.net 中的键值对
- 使用 Ajax 将 PHP 嵌入到 JavaScript 中,以便将 MySQL 数据存储在 JavaScript 对象
- 无法将数据存储到 mongoDB
- Ext JS - 将面板绑定到数据存储的最佳方法
- 如何将数据存储值传递给javascript?我需要从gae数据存储中获取数据,并需要传递javascript
- 在数组数组中查找表数据存储
- 客户端数据存储
- 如何使用javascript将数据存储到mysql数据库中
- ServiceWorker数据存储在哪里
- Javascript Security:将敏感数据存储在比cookie更安全的自调用函数中