Extjs - 迭代缓冲商店中显示的记录的最佳方式

时间:2014-05-15 01:55:17

标签: javascript extjs

所以,我正在从 EXT 4.1.1a升级到4.2.2 ,并且遇到了缓冲存储的问题。在4.1.1a中,我可以使用store.each遍历当前显示的商店记录,但在4.2.2中我只是得到错误:

TypeError: Cannot read property 'length' of undefined

基本上在商店对象中,data属性不再具有items属性,each方法使用length属性items因此错误。相反,商店中的商品似乎位于data.map中。我可以循环data.map,但似乎应该有更好的方法。文档只提到store.each作为执行此操作的方法,即使缓冲存储似乎失败了。

我在连接到网格视图的refresh侦听器上遍历商店。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:7)

显然他们认为你不能遍历商店,因为它有"稀疏"数据,但事实并非如此。目前,您可以做的是以下内容。

if(store.buffered) {
    // forEach is private and part of the private PageMap
    store.data.forEach(function(record, recordIdx) {
        /* Do stuff with the record here */
    }, this);
} else {
    store.each(function(record) {
        /* Do the same stuff I guess */
    }, this);
}

重要

注意以后可能会改变商店的结构,这肯定会扼杀你的代码。

此外,我坚信如果使用了合适的设计模式,each必须在不关心结构的情况下处理循环。

<强>优化

当我初始化商店时,我通常会做的事情如下:

if(store.buffered) {
    store.iterate = store.data.forEach;
} else {
    store.iterate = store.each;
}

然后你可以像这样使用它:

store.iterate(fn, scope);

这不是最好的决定,但是如果 -statements

,则可以简化写很多