Sencha touch 2模型关联保存不正确的数据存储

时间:2012-05-31 14:51:17

标签: javascript sencha-touch extjs sencha-touch-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关联。

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

1 个答案:

答案 0 :(得分:2)

不自动加载奖励将解决此问题,删除学生的autoload: true&gt;&gt;奖项有很多协会。我不完全理解为什么自动加载奖项会破坏事情,但这个论坛帖子暗示这是一个错误: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