Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Event 'edge:connected' is not triggered when redirect edge's source or target which on the same node. #2779

Closed
damnright opened this issue Oct 18, 2022 · 11 comments
Labels
type: discussion 讨论 Usage questions, guidance, and other discussions

Comments

@damnright
Copy link
Contributor

问题描述

使用arrowhead EdgeTool拖动edge的起点或终点,调整edge在同一节点上的连接点时(锚点),edge:connected不会触发,没法做一系列处理。操作后连接点会自动连接到节点中心锚点。

重现链接

https://codesandbox.io/s/edge-connectedchu-fa-wen-ti-k4e1qr

重现步骤

1.鼠标移到source节点。
2.点击连线到target节点任意位置。
3.鼠标移到连线终点。
4.拖动连线终点箭头,重新调整连接target节点的位置。

预期行为

edge:connected触发

平台

  • 操作系统: Windows
  • 网页浏览器: Google Chrome
  • X6 版本: 1.34.3

屏幕截图或视频(可选)

No response

补充说明(可选)

No response

@damnright
Copy link
Contributor Author

目前想到的解决方法是,修改Edge.equalTerminals的判定

@lloydzhou
Copy link
Contributor

lloydzhou commented Oct 21, 2022

调整edge在同一节点上的连接点时(锚点)

这个动作相对来说只是更新了edge的target的值。理论上是不应该触发edge:connected
你想要监听这个改动,或许可以直接监听edge这个target的变化(监听change:target事件)。

@damnright damnright changed the title edge:connected触发问题 Event 'edge:connected' is not triggered when redirect edge's source or target which on the same node. Oct 21, 2022
@damnright
Copy link
Contributor Author

damnright commented Oct 21, 2022

调整edge在同一节点上的连接点时(锚点)

这个动作相对来说只是更新了edge的target的值。理论上是不应该触发edge:connected。 你想要监听这个改动,或许可以直接监听edge这个target的变化(监听change:target事件)。

和连接同一节点port变更类似吧,本质也是连接同一节点的位置变更了,都应该触发吧。source或target变化了,那肯定是边重新连接了。
而且直接监听edge属性change会有问题,拖动时会频繁触发change事件,触发时机也不合理,应该是mouseup时触发 边重新连接事件

@NewByVector
Copy link
Contributor

@damnright 连接锚点默认在节点中心,不管你怎么连接,都会默认重置到节点中心,除非你修改锚点位置,可以参考这个 demo

@NewByVector NewByVector added the type: discussion 讨论 Usage questions, guidance, and other discussions label Oct 24, 2022
@damnright
Copy link
Contributor Author

damnright commented Oct 25, 2022

@damnright 连接锚点默认在节点中心,不管你怎么连接,都会默认重置到节点中心,除非你修改锚点位置,可以参考这个 demo

想要使用arrowhead重新调整edge连接节点的位置,然而在同一节点上时不会触发edge:connected,就没法修改锚点位置。
只能先把arrowhead移到空白或其他节点,再移回来才能触发
20221025_103233

@NewByVector
Copy link
Contributor

@damnright 不一定需要非得使用 edge:connected 事件,而且 edge:connected 事件也在这里也不合适。这里还是用监听 batch:stop 事件,然后根据事件参数 name=move-arrowhead 来判断。

@damnright
Copy link
Contributor Author

@damnright 不一定需要非得使用 edge:connected 事件,而且 edge:connected 事件也在这里也不合适。这里还是用监听 batch:stop 事件,然后根据事件参数 name=move-arrowhead 来判断。

batch:stop事件参数没有e和type,依旧没法修改锚点位置啊,还有什么别的方法呢

@NewByVector
Copy link
Contributor

@damnright 如果这样的话,可以监听 edge:mouseup 事件,通过 e.target 判断是否是目标节点,可以达到你的效果。

@damnright
Copy link
Contributor Author

@damnright 如果这样的话,可以监听 edge:mouseup 事件,通过 e.target 判断是否是目标节点,可以达到你的效果。

监听 edge:mouseup 事件,可以在e.data中拿到需要的信息,但e.data是这样的,现在是遍历查找action名字拿到的:
kk_image

这个是内部属性?这样使用有问题吗,会不会不稳定

@NewByVector
Copy link
Contributor

有个简单的方式:

graph.on('edge:mouseup', ({e, view}) => {
  console.log(view.getEventData(e))
})

@x6-bot
Copy link
Contributor

x6-bot bot commented Oct 29, 2023

This thread has been automatically locked because it has not had recent activity.

Please open a new issue for related bugs and link to relevant comments in this thread.

@x6-bot x6-bot bot locked as resolved and limited conversation to collaborators Oct 29, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: discussion 讨论 Usage questions, guidance, and other discussions
Projects
None yet
Development

No branches or pull requests

3 participants