【问题标题】:Empty Grid Cells Until Resize在调整大小之前清空网格单元格
【发布时间】:2021-03-14 21:36:52
【问题描述】:

我正在使用 ExtJS 7.3.1,并且我有一个网格绑定到一个带有 REST 代理的虚拟商店。单元格值映射到加载到存储中的模型的属性。 AFAIK 这里没什么特别的。

我发现当我加载视图时,它会从 API 中提取数据并按预期将行添加到网格中,但单元格是空的。但是,当我调整窗口大小和网格大小时,单元格会被正确填充。

在调整大小之前查看浏览器的开发工具,我看到单元格如下所示,其中 x-body-el 的内容是   而不是模型属性中的值。

<div data-componentid="ext-gridcell-10" class="x-gridcell x-widthed x-align-left" data-xid="101" id="ext-gridcell-10" tabindex="-1" style="width: 473.688px;">
  <div data-qoverflow="true" class="x-body-el x-gridcell-body-el" id="ext-element-326">
    &nbsp;
  </div>
</div>

调整大小后,&amp;nbsp; 被模型中的正确值替换。

真的很奇怪。也许是一个错误?

【问题讨论】:

  • 您能分享一个显示您的问题的煎茶小提琴吗? (fiddle.sencha.com)
  • 对不起,我无法用小提琴重现这个问题。我一直在与支持人员讨论这个问题,我们发现如果我使用普通商店而不是虚拟商店,问题就会消失。还在挖。

标签: extjs


【解决方案1】:

不幸的是,在 ExtJS 7.3 中添加了一些关于虚拟商店的错误。我还为这样的问题创建了一张票,这是由执行重新加载引起的。这里不仅单元格是空的,选择模型也被破坏了。

我为此创建了一个小提琴(可能是同样的问题): https://fiddle.sencha.com/#fiddle/3c0u

如果您单击“加载”,一切正常。 如果单击“加载并重新加载”,您将获得空单元格。 点击“重新加载”也是如此

提示:您必须重新运行应用程序才能看到问题。如果一开始发生负载,它将起作用,并且您无法重现该问题。

我们通过添加以下覆盖暂时解决了这个问题:

Ext.define('X.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);

                // Condition for a valid page
                if (me.pageMap.getPageCount() !== 0 && pageNumber) {
                    page = me.pageMap.getPage(pageNumber - 1, false);

                    if (page && !(page.error = op.getError())) {
                        // Filling the page with records loaded from the operation
                        // and marking the page as loaded
                        page.records = op.getRecords();
                        page.state = 'loaded';
                    }
                }

                me.fireEvent('reload', me, op);

                for (i = 0; i < len; ++i) {
                    range = activeRanges[i];

                    if (pageMap.canSatisfy(range)) {
                         range.reload();
                    }
                }
                // override start

                // This fixes the problem, that first page entries are displayed as empty rows
                // and the selection model not working after reload.
                // With this override, the page will be handled like in a load.
                // This is only called for the active page, since the others are loaded normally over load.
                // Has to be placed after range.reload(). Otherwise the selection will break (only works if both exist).
                // Issue EXTJS-29428
                if (pageMap && page) {
                    pageMap.onPageLoad(page);
                }
                // override end
            }

            if (resultSet) {
                rsRecords = resultSet.records;
            }

            me.fireEvent('load', me, rsRecords, wasSuccessful, op);
        }
    }
});

【讨论】:

  • 最初的症状是相同的,“空”单元格,所以它可能是相关的,但我的麻烦有点不同。当网格水平调整大小时,空单元格将获得填充属性。除非重新加载整个页面,否则后续重新加载不会导致错误。另外,如果表格中的行数超过了不滚动的行数,那么尽管我的系统不会出现问题,这是因为添加滚动条时网格会水平调整大小。
  • 好的。但是我们在使用虚拟商店时遇到了多个问题,其中一些问题来自 7.3。所以可能你可以试试这个问题是否也出现在7.2中。我认为需要进一步的帮助。
  • 理解并同意。非常感谢您的意见。
  • 无法通过小提琴重现此问题,但 Sencha Support 提供了相同的重载进行测试,它确实解决了问题。我仍然不明白为什么,但我继续前进。非常感谢 Timz。
  • 所以他们共享我们的覆盖?不错 :-) 作为提示:由于 7.3.X 带来的其他问题,我们决定将 7.2 的实现用于虚拟商店。 ## 选择损坏:fiddle.sencha.com/#fiddle/3cgm&view/editor ## 过滤错误记录:fiddle.sencha.com/#fiddle/3ccn&view/editor ## 过滤错误记录2:fiddle.sencha.com/#view/editor&fiddle/3cmt 。我们为所有这些问题创建了票证,但还没有任何结果。如果这回答了您的问题,请随时将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多