被迫升级7.2现代-> 7.3.1由于节点15.x中的开放工具中断(一个由我的mac上的自制应用程序的更新)。不,我发现使用虚拟存储的网格不再适用于选择第一页上的任何内容!看看Sencha自己的厨房水槽,第一页不会在第一页高亮显示,但如果向下滚动可以工作,行是可选的:https://examples.sencha.com/extjs/7.3.0/examples/kitchensink/?modern#infinite-grid有人知道解决方法吗?
发布于 2020-10-26 14:58:26
编辑:如果你有网格过滤器插件,我发现第一个页面加载被中止,并发出重新加载。重新加载未在virtualPage上运行onLoad方法。这会导致加载数据,但不更新indexMap。我做了一个重写来调用这个方法。这还没有经过很好的测试。除了我的简单测试用例之外。
如果您正在使用Ext.Direct填充虚拟商店,并且您滚动到fast,则系统将自己绊倒并锁定。我对此也有一个覆盖,我将在此票据的底部添加它。
Ext.define('Xxx.override.data.virtual.Store', {
override: 'Ext.data.virtual.Store',
privates: {
handleReload: function(op) {
var me = this,
activeRanges = me.activeRanges,
len = activeRanges.length,
pageMap = me.pageMap,
resultSet = op.getResultSet(),
wasSuccessful = op.wasSuccessful(),
pageNumber = op.config && op.config.page,
rsRecords = [],
i, range, page;
if (wasSuccessful) {
me.readTotalCount(resultSet);
if (me.pageMap.getPageCount() !== 0 && pageNumber) {
page = me.pageMap.getPage(pageNumber - 1, false);
if (page && !(page.error = op.getError())) {
page.records = op.getRecords();
page.state = 'loaded';
}
}
page.onLoad(op); // ONLY CHANGE TO ORIGINAL METHOD
me.fireEvent('reload', me, op);
for (i = 0; i < len; ++i) {
range = activeRanges[i];
if (pageMap.canSatisfy(range)) {
range.reload();
}
}
}
if (resultSet) {
rsRecords = resultSet.records;
}
me.fireEvent('load', me, rsRecords, wasSuccessful, op);
}
}
});
使用虚拟存储时Ext.Direct将被覆盖。
Ext.define('Xxx.override.data.proxy.Direct', {
override: 'Ext.data.proxy.Direct',
abort: function(operation) {
let returnValue = this.callParent(arguments);
if (operation && operation.isDataRequest) {
operation = operation.getOperation();
}
// This is the part added by mcg1103. when using a virtual store
// when an operation is aborted it is never completed and the Page
// object is left behind in the loading array among other places.
// firing the callbacks will gracefully remove all remnants.
if (operation && Ext.isFunction(operation.triggerCallbacks)) {
operation.triggerCallbacks();
}
return returnValue;
}
});
编辑:仍然没有解决方案,但如果您注释掉
plugins: {
gridfilters: false
},
这个问题就消失了。这是因为在调用加载第一个页面的操作之后,会触发reload filter事件。这会导致第一页的加载中止。页面应该重新加载,但看起来并没有。数据在那里,页面数据被加载,但是indexMap没有设置这些值。因此,当加载中止时,页面不会删除属性,因此它将被重新加载。我还在苦苦寻找解决方案。
这一点在7.3.0中也被打破了。我已经将其范围缩小到没有为第一页正确设置location对象。位置有几个问题我看到的主要问题是recordIndex没有正确设置,它仍然是默认值-1。并且没有创造记录。当然,这只是无限存储上的第一页记录。location对象也缺少其他数据。看起来它没有被设置好。正在调用childtap事件,但位置当然是错误的。我正在查看位置不正确的原因...如果我弄清楚了我会报告的。
编辑:由于indexMap没有首页的记录,系统无法通过InternalId查询到该记录。第一页未开始调用onPageLoad事件。还在找。
https://stackoverflow.com/questions/64532388
复制相似问题