【问题标题】:GoJS Keep Group of Nodes copied via DraggingToolGoJS 保持通过 DraggingTool 复制的节点组
【发布时间】:2017-05-10 22:00:49
【问题描述】:

有没有办法复制带有DraggingTool 的节点,包括它们的Part.containingGroup?我知道CommandHandler 有一个属性copiesGroupKey,但我在DraggingTool 中找不到任何类似的功能。

如果有一种方法可以检测复制的节点被丢弃在哪个组上以设置新的containingGroup,也许会更好? 删除复制的节点时是否有要订阅的事件?

我也注意到这里的“泳道”示例存在同样的问题 http://gojs.net/latest/samples/swimLanes.html 通过CommandHandler 复制节点可以正常工作,但如果您“控制拖动”它们,它们将被放置在任何组之外,我猜这个示例根本不可能?!

【问题讨论】:

  • 我想我发现了一些东西,在groupTemplatemouseDrop: function(e, grp) { if (!e.shift) return; ... } 将取消添加到组中。有没有办法检测grp.diagram.selection是否是复制或移动操作,也许检查活动工具
  • mouseDrop 条件更改为if (e.diagram.currentTool.copiedParts === null && !e.shift) return; 似乎有效。可以将节点复制到相同或不同的组,但只有在按住 shift 键时才能移出组。我把它留在这里,因为它也可能是示例代码中的一个错误

标签: javascript gojs


【解决方案1】:

您的意思是您正在 (CTRL) 拖动组内的节点,您也想复制该组吗?您必须将该组添加到被拖动的集合中。您可以通过覆盖DraggingTool.computeEffectiveCollection 来做到这一点。可能是这样的:

  myDiagram.toolManager.draggingTool.computeEffectiveCollection = function (parts) {
    var map = go.DraggingTool.prototype.computeEffectiveCollection.call(this, parts);
    // add more stuff to map
    var it = parts.iterator;
    while (it.next()) {
      var p = it.value;
      if (p.containingGroup !== null) {
        var group = p.containingGroup;
        map.add(group, new go.DraggingInfo(group.location));
      }
    }
    return map;
  }

【讨论】:

  • 不,对不起,如果我的解释不清楚。我只想在 ctrl 将复制的节点拖到另一个组(或同样的)时为复制的节点设置一个组。如果您查看官方 Swim Lane 示例(我的问题中的链接)并尝试 ctrl 拖动一个节点,则该组丢失(它将被放置在泳道之外!)。我现在用我的 cmets 中提到的代码修复了它。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2016-11-26
  • 2022-01-22
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多