所以,我正在从 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
侦听器上遍历商店。
非常感谢任何帮助
答案 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
,则可以简化写很多