2017-05-10 35 views
1

有沒有一種複製節點的方法,其中DraggingTool包括它們的Part.containingGroup?我知道CommandHandler有一個屬性copiesGroupKey,但我在DraggingTool中找不到任何類似的功能。GoJS通過DraggingTool保持複製節點組

如果有辦法檢測複製的節點在哪個組上被刪除以設置新的containingGroup,可能會更好嗎? 複製節點被刪除時是否存在要訂閱的事件?

我還通過發現在這裏 http://gojs.net/latest/samples/swimLanes.html 複製節點的「泳道」樣品同樣的問題CommandHandler工作正常,但它不應該是可能的,如果你「控制,拖動」它們放在任何集團之外根據那個例子我想呢?!

+0

我想我在'groupTemplate'中找到了一些東西,'mouseDrop:function(e,grp){if(!e.shift)return; ...}將取消該組的添加。有沒有辦法檢測'grp.diagram.selection'是否是複製或移動操作,也許檢查激活的工具 – xander

+0

將'mouseDrop'條件改爲'if(e.diagram.currentTool.copiedParts === null &&!e.shift)return;'似乎工作。可以將節點複製到相同或不同的組,但移出組只能在按住Shift鍵時才起作用。我只是把它留在這裏,因爲它可能是示例代碼中的一個錯誤 – xander

回答

0

你的意思是你(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; 
    } 
+0

不,如果我的解釋不清楚,對不起。我只想在ctrl拖動它們到另一個組(或者相同的情況)時將它設置到複製的節點上。如果你看官方Swim Lane示例(鏈接在我的問題中),並嘗試按Ctrl拖動一個節點,組將丟失(它將被放置在車道之外!)。我現在用我評論中提到的代碼來修復它。 – xander