【问题标题】:GoJS Item (Node) selection via key通过键选择 GoJS 项目(节点)
【发布时间】:2017-11-09 09:41:15
【问题描述】:

在 Angular 中使用 typescript,我如何使用它的键从图中选择一个节点?

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

我必须在图表上调用哪个函数才能选择具有键“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 个窗口,图表窗口和一个属性窗口(我在其中编辑节点的属性),我需要能够在拖放项目时立即编辑属性,但是似乎如果我编辑该项目,然后单击放置的项目,它们不再相同,并且之前编辑的项目丢失了。

【问题讨论】:

    标签: angular typescript gojs


    【解决方案1】:

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

    如果您通过设置 GraphLinksModel.linkKeyProperty 在您的 GraphLinksModel 中启用了链接的键,那么这就足够了:

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

    如果您尚未启用维护链接数据的唯一键,则需要执行您为链接所做的操作:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2018-03-15
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      相关资源
      最近更新 更多