extjs 无限网格在Ext JS 7.3.1 modern中不再工作

alen0pnh  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(172)

由于Open Tooling在节点15.x中被破坏,被迫升级到7.2 modern -〉7.3.1(由我的mac上的homebrew应用的更新)。不,我发现使用虚拟商店的网格不再适用于选择第一页上的任何内容!请参见 Sencha 自己的厨房Flume,其中第一页不显示第一页上的突出显示,但如果向下滚动,它就可以工作,并且行是可选择的:https://examples.sencha.com/extjs/7.3.0/examples/kitchensink/?modern#infinite-grid有人知道变通办法吗?

wgmfuz8q

wgmfuz8q1#

编辑:如果你有网格过滤器插件,我发现第一个页面加载被中止,并发出了一个重新加载。重新加载没有在virtualPage上运行onLoad方法。这导致了数据被加载,但indexMap没有被更新。我做了一个覆盖来调用这个方法。这没有得到很好的测试...超出了我的简单测试用例。
如果你使用Ext.Direct来填充虚拟商店,你滚动到快,系统会自己绊倒并锁定。我也有一个覆盖,我会把它添加在这张票的底部。

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.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 filters事件被触发。这导致第一页的加载被中止。该页应该被重新加载,但它似乎没有。数据在那里,页面数据已加载,但indexMap没有设置值。2因此,当加载中止时,页面不会被删除,因此将重新加载。我仍然在兔子洞里寻找解决办法。
这个问题在7.3.0中也是被破坏的。我已经把它缩小到第一页的位置对象没有被正确设置。位置有几个问题,我看到的主要问题是recordIndex没有被正确设置,它仍然是默认值-1。并且没有设置记录。当然这只是无限存储上的第一页记录。位置对象也缺少其他数据。看起来它没有被设置。正在调用childtap事件,但位置当然是错误的。我正在查找位置不正确的原因....如果我找到了,将返回报告。
edit:系统无法按InternalId找到记录,因为indexMap没有第一页的记录。没有开始为第一页调用onPageLoad事件。仍在查找。

相关问题