在JointJS中显示隐藏的元素

时间:2018-01-08 10:51:58

标签: javascript jointjs

This answer显示了如何隐藏可见元素。我想创建一些操作来切换一些元素的可见性。根据{{​​3}},我需要使用element.removeAttr删除一些属性。我可以看到已删除的./display', 'none'属性,但在UI元素仍然隐藏 - 它们应该是可见的。

你知道我错过了什么吗?我应该以某种方式重新呈现UI吗?

以下是我的活动。

paper.on('cell:pointerdown', function switchTaskVisibility(...args) {
  const selectedItem = args[0];
  const successors = graph.getSuccessors(selectedItem.model);
  const tasks = successors.filter(function isElementOfTypeTask(element) {
    const type = element.prop('type');
    if (type === 'task') return element;
  });
  console.log(tasks);

  const hasVisibleTasks = selectedItem.model.prop('hasVisibleTasks');
  if (hasVisibleTasks) {
    tasks.forEach((element) => {
      element.attr('./display', 'none');
    });
  }
  else {
    tasks.forEach((element) => {
      element.removeAttr('./display');
    });
  }

  // HERE I CAN SEE THAT DISPLAY ATTRIBUTE SWITCHES CORRECTLY
  // BUT AFTER FIRST HIDING OF ELEMENTS I CANNOT MAKE THEM VISIBLE IN UI
  console.log(graph.getSuccessors(selectedItem.model)); 

  selectedItem.model.prop('hasVisibleTasks', !hasVisibleTasks);
});

谢谢,

拉​​法尔

2 个答案:

答案 0 :(得分:1)

我找到了一些解决方法。由于某些原因 const hasVisibleTasks = selectedElement.prop('hasVisibleTasks'); if (hasVisibleTasks) { cells.forEach((element) => { element.attr('./visibility', 'hidden'); }); } else { cells.forEach((element) => { element.attr('./visibility', 'visible'); }); 没有正确地重新渲染元素,所以我测试了element.removeAttr('./display')属性,如下所示:

child_process.execFile()

工作正常。但我仍然不明白为什么child_process.execFile()之前没有重新呈现UI。

致以最诚挚的问候,

拉法尔

答案 1 :(得分:0)

无论解决方案如何,为什么你使用const数据类型用于hasVisibleTasks,因为此变量的值似乎在运行时发生变化。