错误“TypeError:在ExtJS中加载Store后,如果(records.length< 1){”则记录未定义

时间:2013-06-07 14:58:58

标签: javascript extjs

我正在尝试将我的项目从ExtJS 4.1移动到4.2,我收到了一个奇怪的错误。每次我加载存储(我使用缓冲存储)到我的网格后,我收到这样的错误

TypeError: records is undefined

if (records.length < 1) { 
string number 134635

This is link to my grid-making js file

And this is link to my store-init file

它可以是什么?

2 个答案:

答案 0 :(得分:4)

使用缓冲存储从4.1迁移到4.2后,我也收到了此错误。它似乎是由在网格中进行选择然后调用store.load()引起的。两个解决方法:

1)为extjs源代码添加修复程序(ugh)(请参阅此博客文章,使用谷歌翻译):http://blog.khodam.org/extjs/upgrade-guide-extjs-4-1-dan-extjs-4-2-menghindari-error-dan-abnormal-behaviour-pada-extjs-4-2-0.php

2)在重新加载商店之前删除选择,例如:

grid.getSelectionModel().deselectAll(true); 
store.load();

(您需要使用自己的网格/存储变量,或者使用Ext.getCmp()等进行查找。)

答案 1 :(得分:0)

我也遇到了这个问题,非常感谢George Geczy在Sencha论坛找到了Daniil的solution

解决此问题的最佳方法是覆盖'storeHasSelected'事件,如下所示:

Ext.selection.Model.override({
    storeHasSelected: function(record) {
        var store = this.store,
            records,
            len, id, i;

        if (record.hasId() && /*store.getById(record)*/ store.getById(record.getId())) {
            return true;
        } else {
            records = store.data.items;
            len = records.length;
            id = record.internalId;

            for (i = 0; i < len; ++i) {
                if (id === records[i].internalId) {
                    return true;
                }
            }
        }
        return false;
    }    
});

1)我不建议编辑extjs源代码,可能需要花费很多时间来搜索“如何解决修复”。

2)在重新加载商店之前删除选择是不够的,还需要覆盖pagingtoolbar中的刷新按钮。