我正在尝试使用Blessed,一个用于Node的文本UI库。我想动态创建窗口(使用后释放它们),但我在文档中找不到有关如何销毁它们的信息。
我试图从它的父级(屏幕)中删除创建的Box对象并删除对它的任何引用,因此Node的GC可以完成其余的工作,但它似乎不起作用,可能是某个引用泄漏到某处
我能找到的例子没有做这样的事情,它们都创建了一堆窗口,隐藏它们并在需要时再显示它们。
有没有人知道如何做到这一点,或者这不受支持?
答案 0 :(得分:5)
您可以使用remove method来执行此操作。
例如,如果您使用:screen.append(form);
将表单(屏幕显示为父级)附加到屏幕上,则可以使用screen.remove(form);
销毁表单,但效果很好。
示例:
var form = blessed.form({
parent: screen,
width: '50%',
height: 7,
border: {
type: 'line'
},
keys: true,
tags: true,
top: 'center',
left: 'center'
});
var cancel = blessed.button({
parent: form,
mouse: true,
keys: true,
shrink: true,
padding: {
left: 1,
right: 1
},
left: 48,
width: 9,
top: 3,
name: 'cancel',
content: 'cancel',
style: {
focus: {
bg: 'blue',
fg: 'white'
},
hover: {
bg: 'blue',
fg: 'white'
}
},
border: {
type: 'line'
}
});
var submit = blessed.button({
parent: form,
mouse: true,
keys: true,
shrink: true,
padding: {
left: 1,
right: 1
},
left: 35,
width: 9,
top: 3,
name: 'submit',
content: 'submit',
style: {
focus: {
bg: 'blue',
fg: 'white'
},
hover: {
bg: 'blue',
fg: 'white'
}
},
border: {
type: 'line'
}
});
screen.append(form);
submit.focus();
screen.render();
cancel.on('press', function() {
screen.remove(form);
screen.render();
});