jsplumb无法监听页面DOM更新

这个问题困扰了我很久,网上也没找到什么记录方法,这里就记录一下


image.png

需求是这样的,点击可以折叠下面表格字段,连线连到外面的表头上,但是由于jsplumb并不知道dom变化了,所有连接点left center位置还是连在外面,下图这样


image.png

理想中的点应该是在表头中间位置
拖拽锚点以后才恢复正常


image.png

image.png

下面说说解决方法把:先revalidate(el), 再repaint(el)

        await delay(0);    // setTimeout 的封装
        let el = $(`#${tableId}`)[0];  //  dom
        try{
          this.chart.jp.revalidate(el);
        }catch(e){
          this.chart.jp.repaint(el)
        }        

1、 await delay(0); 这行代码必须写,否则不生效,应该是dom变化了el不准确
2、 el是需要更新的dom,此处是如图

image.png

3、this.chart.jp 是封装的chart对象的实例

import { jsPlumb} from 'jsplumb';

export default class {
    constructor(container) {
        this.jp = jsPlumb.getInstance();
        this.setContainer(container)
    }
    setContainer(container) {
        this.jp.setContainer(container);
    }
}

// 组件中
this.chart = new Chart("flow_container");

this.chart.jp.revalidate(el) jsplumb内部会报错,但也找不到原因,所有try catch下,


image.png

然后就完美解决了

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容