通过键选择 GoJS 项目(节点)

GoJS Item (Node) selection via key

在 Angular 中使用打字稿,我如何 select 图表中的节点使用其键?

当我创建一个新节点时,我必须用鼠标左键单击它才能select它,我希望它立即被select编辑。

为了 select 具有键“1”的节点,我必须在图表上调用哪个函数,这是我尝试过的方法,但似乎不起作用:

selectItem(item: any) {
    this.selectedItem = item;
    this.myDiagram.select(this.myDiagram.findNodeForKey(item.key));
    if (this.selectedItem['toPort']) {
      this.selectedItemtype = 'Link';
      this.myDiagram.select(this.myDiagram.findLinkForData(item));
    } else {
      this.selectedItemtype = 'Node';
      this.myDiagram.select(this.myDiagram.findNodeForKey(item.key));
    }
    // this.rerender();
}

我从树上放下一个项目,有 2 个 windows、图表 window 和一个 属性 window(我在其中编辑节点的属性) ,我需要能够在放置项目时直接编辑属性,但似乎如果我编辑项目,而不是单击放置的项目,它们不再相同,并且以前编辑的项目丢失。

这基本上是正确的,但不必要地复杂。但是要么你做了两次(如果它是一个节点),要么你可能找不到 link 如果它在模型中不是相同的 link 数据对象。

如果您通过设置 GraphLinksModel.linkKeyPropertyGraphLinksModel 中为 link 启用了键,这应该足够了:

if (item.toPort !== undefined) {
  myDiagram.select(myDiagram.findPartForKey(item.key));
} else {
  myDiagram.select(myDiagram.findNodeForKey(item.key));
}

如果您没有为 link 数据启用维护唯一键,您将需要执行与 links 相同的操作:

myDiagram.select(myDiagram.findLinkForData(item));

但这又取决于您的 item 是否与 GraphLinksModel.linkDataArray 中的对象引用相同。如果不是同一个指针,您可能需要调用 Diagram.findLinksByExample 并选择一个。

关于 属性 编辑器,您是否使用 DataInspector,https://gojs.net/latest/extensions/DataInspector.html?如果是这样,那应该就可以了。如果您已经实现了自己的 HTML 元素来编辑属性,那么您可能引用了错误的引用。你应该showing/editing第一部分的属性在Diagram.selection。当用户从另一个图表(或同一个图表)拖放节点的新副本时,新副本将在 Diagram.selection 集合中。