EXTJS 6 Modern: buffered store + grid: Uncaught TypeError: Cannot read property 'length' of undefined

EXTJS 6 Modern: buffered store + grid: Uncaught TypeError: Cannot read property 'length' of undefined

这是fiddle https://fiddle.sencha.com/?fiddle=1ahm#fiddle/1ahm

具有几乎相同代码的经典主题效果很好。

这是一个煎茶错误,请及时到官方论坛报告。

  • store.getRange()可以不带start和end参数调用。 ("The starting index. Defaults to zero."/"The ending index. Defaults to the last record. The end index is included.")
  • bufferedStore.getRange() 没有明确告诉我们它可以在没有参数的情况下调用,但我们可以安全地假设它隐式应该,因为它覆盖了父 class 的函数定义。至少现代网格是这样假设的。
  • bufferedStore.getRange() 然后用 startend (均未定义)
  • 调用私有函数 rangeCached
  • rangeCached 显然希望这两个是数字,否则他们为什么还要在 start === 0 ? 0 : start - 1?
  • 处使用严格的相等运算符

如果只是这个故障,您可以通过覆盖修复它,例如:

Ext.define('MyBufferedStoreOverride',{
    override:'Ext.data.BufferedStore',
    getRange:function(start, end, options) {
        if(!Ext.isNumber(start)) start = 0;
        if(!Ext.isNumber(end)) end = this.getCount();
        me.callOverridden([start, end, options]);
    }
})

但我认为 Sencha 从未使用 BufferedStore 测试过他们的现代网格,因为一旦你解决了第一个错误,就会抛出下一个错误。

尝试将高度设置为网格并让网格从 'Ext.grid.GridPanel' 而不是 'Ext.grid.Grid' 延伸。

ExtJS 6.6.0 中,bufferedStoredocumentation 表示对于现代工具包,您必须使用 Ext.data.virtual.Store.