我花了好几个小时试图找出这种情况发生的原因。我不确定我的代码中是否有错误或者这是否是ExtJS错误。
我有一个网格,其中有大约7000行,所以它非常大。我修改了网格中列的所有单元格中的某些内容,然后执行 grid.getView()。refresh()。很简单,这一切都发生在客户端。
然而,每当调用 grid.getView()。refresh()时,大约80%的行都会消失!
代码看起来像这样:
handler = function () {
for (var j = 0; j < myGrid.store.data.items.length; j++) {
var outlet = myGrid.store.data.items[j].data;
outlet['field'] = 'Hey';
}
myGrid.getView().refresh();
}
我甚至将其简化为:
handler = function () {
myGrid.getView().refresh();
}
问题仍然存在!!!
不幸的是,由于数据集较大,我不能在jsfiddle中复制它。
我正在使用 bufferedRenderer 插件,该插件设置为:
this.plugins = {
ptype: 'bufferedrenderer',
trailingBufferZone: 20, // Keep 20 rows rendered in the table behind scroll
leadingBufferZone: 50 // Keep 50 rows rendered in the table ahead of scroll
};
这是否有效果我不知道。
有谁知道这可能是什么?我接下来的步骤可以推断出这个问题吗?
更新:它似乎与bufferedrenderer有关。如果我将其停用,则不会出现问题。
另外我没有提到的是刷新的表隐藏在选项卡式窗格后面。所以本质上也许bufferedRenderer意识到它不重要因为它隐藏了,或者......我不知道。它只是让bufferedRenderer感到困惑。
更新:这是一个解决问题的小提琴。第二个选项卡中大约有5000行。当我单击第一个选项卡中的刷新按钮时,90%的行都会消失。
http://jsfiddle.net/4nupbosf/5/
有时问题不会发生。但最终它会。继续尝试。
答案 0 :(得分:1)
tabpanel的高度未定义,因此它为零,因此网格高度也是如此。你只看不到行,它们就在那里,只需在tabpanel上添加一个高度。
然后,小提琴中的所有记录都具有相同的ID - 它不可能。
然后,您使用new
关键字创建商店,这可能会导致一些问题,但不一定。
然后,在上面的代码中,您可以使用data
属性直接访问记录数据。你永远不应该这样做。请改用record.set('fieldName', newValue)
。