hizzgdev / jsmind

a mind mapping library built by javascript

Home Page:http://hizzgdev.github.io/jsmind/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

移动或者单击节点,会提示节点找不到

leeyoshinari opened this issue · comments

问题:打开第一个文件时,可以任意编辑、移动节点(必须要移动节点),关闭文件后,打开另一个文件,单击或移动哪个节点,就提示哪个节点找不到并报错。如果两次打开的是同一个文件,就不会报错,可以帮看看可能是什么原因吗,谢谢~

报错截图:
image

系统:windows10 家庭版 64位
浏览器:chrome 118.0.5993.71 64位
jsmind版本:0.7.4

以下是主要代码:
1、从后端读取xmind

function read_xmind(file_id) {
    $.ajax({
        type: 'GET',
        url: '/content/get/' + file_id,
        success: function (data) {
            if (data['code'] === 0) {
                let options = {
                    container: 'win-xmind', 
                };
                let jm = new jsMind(options);
                jm.show(data['data']);
            }
        }
    })
}

2、保存 xmind

function save_xmind() {
    let jm = jsMind.current;
    let file_id = $('#win-xmind>.jsmind-inner')[0].id;
    save_text_file(file_id, jm.get_data('node_tree').data);  // 保存接口
    $('#win-xmind')[0].removeChild($('#win-xmind>.jsmind-inner')[0]);  // 移除容器下 jsmind 节点
}

在你这个使用场景里,只应该new一次jsmind,否则你用的那个jm对象很可能不是你希望用到的那个。

let jm = new jsMind(options); 

把这句拿出来, read_xmindsave_xmind 里都使用这个 jm 应该就没问题了。

另外 save 之后为什么要移除 jsmind-inner 里的内容呢? 你是想清空整个脑图吗?所以这才是你需要反复new的原因?

如果是这个原因的话,可以考虑其他的处理方式,比如加上一层把脑图给挡上之类的。

试过把 let jm = new jsMind(options); 拿出来只 new 一次,每次 read_xmind 时只 jm.show(data);,每次 save_xmind 时设置 display 为 none 隐藏起来,但是打开第二个文件时就页面乱了,如下图:
image

jsmind绘图时需要知道container的尺寸,所以不要用 display:none,隐藏的话可以用 visibility:hidden

感谢,正常了