动态窗口(Boxes)和祝福中的元素(nodejs文本UI库)

时间:2014-05-22 19:46:42

标签: javascript node.js

我正在尝试使用Blessed,一个用于Node的文本UI库。我想动态创建窗口(使用后释放它们),但我在文档中找不到有关如何销毁它们的信息。

我试图从它的父级(屏幕)中删除创建的Box对象并删除对它的任何引用,因此Node的GC可以完成其余的工作,但它似乎不起作用,可能是某个引用泄漏到某处

我能找到的例子没有做这样的事情,它们都创建了一堆窗口,隐藏它们并在需要时再显示它们。

有没有人知道如何做到这一点,或者这不受支持?

1 个答案:

答案 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();
});