EXTJS 6现代:缓冲存储+网格:未捕获的TypeError:无法读取未定义的属性“长度”

时间:2016-05-18 12:48:22

标签: extjs extjs6 extjs6-modern

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

经典主题与几乎相同的代码工作正常。

3 个答案:

答案 0 :(得分:3)

这是一个你应该在官方论坛及时报告的sencha bug。

    可以在没有start和end参数的情况下调用
  • store.getRange()。 ("The starting index. Defaults to zero."/"The ending index. Defaults to the last record. The end index is included."
  • bufferedStore.getRange()没有明确地告诉我们它可以在没有参数的情况下被调用,但我们可以安全地假设它应该是,因为它覆盖了父类的函数定义。至少现代网格是这样的。
  • bufferedStore.getRange()然后使用rangeCachedstart调用私有函数end(两者都未定义)
  • 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测试他们的现代网格,因为一旦你解决了第一个bug,就会抛出下一个错误。

答案 1 :(得分:1)

尝试将高度设置为网格,并从'Ext.grid.GridPanel'而不是'Ext.grid.Grid'获取网格扩展。

答案 2 :(得分:1)

ExtJS 6.6.0 中,bufferedStore的{​​{3}}表示,对于现代工具包,必须使用Ext.data.virtual.Store