找回密码
 立即注册

QQ登录

只需一步,快速开始

nutstore
金牌服务用户   /  发表于:2021-6-28 15:12  /   查看:4749  /  回复:15
100金币
我们在使用ODataVirtualCollectionView这个组件时遇到一个问题:
我们有一个表,有很多列,大概有20列左右,当页面宽度较小时,横向滚动到靠后的列时,就会报错。
报错截图:

  1. vendors~index.50a9cc17.chunk.js:2 DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
  2.     at Es (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1870183)
  3.     at Du (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1889297)
  4.     at t.unstable_runWithPriority (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1910383)
  5.     at Go (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1835081)
  6.     at Iu (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1887196)
  7.     at Ou (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1877494)
  8.     at mu (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1874038)
  9.     at oc (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1902078)
  10.     at lc (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1902941)
  11.     at https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1905454
  12.     at _u (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1877645)
  13.     at Object.unmountComponentAtNode (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:1905439)
  14.     at DirectiveCellFactory.disposeTemplate (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:486:2445)
  15.     at DirectiveCellFactoryBase.doDisposeCell (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:467:7977)
  16.     at DirectiveCellFactoryBase._doDisposeCell (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:467:8173)
  17.     at DirectiveCellFactoryBase.disposeCell (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:467:6584)
  18.     at GridPanel._removeExtraCells (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:398:25132)
  19.     at GridPanel._renderColHdrRow (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:398:19962)
  20.     at GridPanel._updateContent (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:398:17448)
  21.     at FlexGrid._updateContent (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:398:127481)
  22.     at HTMLDivElement.<anonymous> (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/grapecity~index.a4e746b6.chunk.js:398:71944)
  23.     at HTMLDivElement.i (https://azurestaticresource.jianguoyun.net.cn/task/assets/js/vendors~index.50a9cc17.chunk.js:2:442378)
复制代码


从堆栈中看出来,应该是FlexGrid在做列回收时出现了问题。
我们应该怎么解决这个问题呢?

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

15 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-26 16:06:06
16#
收到,根据刚刚和您沟通的情况,这个问题暂时保留处理,临时解决的话继续使用你在12楼发的代码就行。
新版本更新后我会再关注看看类似现象的bug是否已经解决,然后电话告知您
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-9-26 14:09:43
15#
Richard.Ma 发表于 2021-9-24 18:04
这个问题可能还是需要咱们配合来解决,同样的错误,我这边实际上在其他的场景也重现了(同样是React环境, ...

我已经私发发送 电话号码了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-24 18:04:24
14#
这个问题可能还是需要咱们配合来解决,同样的错误,我这边实际上在其他的场景也重现了(同样是React环境,其他的环境就是正常的),并没有用odata数据源。并且报给过研发,

但是由于和您这边引发的原因不同,并不一定能修复您这边的使用场景。

方便的话,可以通过站内信私信一下您的电话,咱们电话沟通一下,看看如何重现问题。然后我再报给研发来确认原因和修复

鼠标放在我回帖的头像上就能弹出这个菜单

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-9-24 16:24:04
13#
Richard.Ma 发表于 2021-9-23 12:00
嗯,应该是新版本中已经修复,在已上报的bug列表中找到了相同错误的问题,虽然引发方式不同。目前已经修复 ...

我在demo 中无法复现bug  主要问题就是  我从一个数据较多的页面 跳转到同样的 数据较少的页面  会出现这样的报错
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-9-24 16:23:10
12#
  1.   useEffect(() => {
  2.     // 每次模板变更都清除 ticketId 使详情模块隐藏
  3.     setDataView(null)
  4.     void initDataView()

  5.     return () => {
  6.       flexGrid?.dispose()
  7.     }
  8.   }, [flexGrid, initDataView])
复制代码


我在我的react代码中添加如下代码 这个bug 才不经常出现了  
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-23 12:00:02
11#
嗯,应该是新版本中已经修复,在已上报的bug列表中找到了相同错误的问题,虽然引发方式不同。目前已经修复。你可以更新项目中的wijmo到最新版本即可
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-9-23 11:45:00
10#
Richard.Ma 发表于 2021-9-23 10:23
抱歉忘记给您回复了,您这边提供的代码修改后无法运行起来,我把这个原始的demo打包了,你可以在这个基础上 ...

这个包下载下来,改了代码复现不了问题;上边的代码可能复制的时候出了问题,现在已经更新了,可以在demo上复现。

看起来是新版本里已经解决了这个问题?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-9-23 10:23:53
9#
抱歉忘记给您回复了,您这边提供的代码修改后无法运行起来,我把这个原始的demo打包了,你可以在这个基础上修改。我这边来重现问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-7 11:36:42
8#
收到
回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-7-7 10:43:06
7#
本帖最后由 nutstore 于 2021-9-23 11:39 编辑

import 'bootstrap.css';
import '@grapecity/wijmo.styles/wijmo.css';
import './app.css';
//
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as wjcCore from "@grapecity/wijmo";
import * as wjcGrid from "@grapecity/wijmo.grid";
import * as wjcOData from "@grapecity/wijmo.odata";
import * as wjGrid from '@grapecity/wijmo.react.grid';
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            orderDetails: new wjcOData.ODataCollectionView("https://services.odata.org/Northwind/Northwind.svc", "Order_Details_Extendeds"),
            virtualOrderDetails: new wjcOData.ODataVirtualCollectionView("https://services.odata.org/Northwind/Northwind.svc", "Order_Details_Extendeds", {
                loaded: (sender, e) => {
                    this.setState({
                        totalItemCount: wjcCore.format("{totalItemCount:n0} items", sender)
                    });
                }
            }),
            itemCount: "",
            totalItemCount: "",
            isEmpty: false,
        };
        setTimeout(() => {
            this.setState({
                isEmpty: true
            })
        }, 3000)
    }
    render() {
        return <div className="container-fluid">
            <div className="col-sm-6">
                <h4>ODataCollectionView</h4>
                <p>{this.state.itemCount}</p>
                <wjGrid.FlexGrid itemsSource={this.state.orderDetails} isReadOnly={true} initialized={this.gridInitialized.bind(this)}>
                </wjGrid.FlexGrid>
            </div>

            <div className="col-sm-6">
                <h4>ODataVirtualCollectionView</h4>
                <p>{this.state.totalItemCount}</p>
{this.state.isEmpty ? null : (
                    <wjGrid.FlexGrid itemsSource={this.state.virtualOrderDetails} isReadOnly={true} initialized={this.virtualGridInitialized.bind(this)}>
                    </wjGrid.FlexGrid>
                )}
            </div>
        </div>;
    }
    gridInitialized(flexgrid) {
        flexgrid.formatItem.addHandler((s, e) => {
            // show row indices in row headers
            if (e.panel.cellType == wjcGrid.CellType.RowHeader) {
                e.cell.textContent = (e.row + 1).toString();
            }
        });
        flexgrid.loadedRows.addHandler((sender, e) => {
            this.setState({
                itemCount: wjcCore.format("{length:n0} items", sender.rows)
            });
        });
    }
    virtualGridInitialized(flexgrid) {
        flexgrid.formatItem.addHandler((s, e) => {
            // show row indices in row headers
            if (e.panel.cellType == wjcGrid.CellType.RowHeader) {
                e.cell.textContent = (e.row + 1).toString();
            }
        });
        flexgrid.scrollPositionChanged.addHandler(() => {
            let rng = flexgrid.viewRange;
            this.state.virtualOrderDetails.setWindow(rng.row, rng.row2);
        });
    }
}
ReactDOM.render(<App />, document.getElementById('app'));


回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部