当前位置: 首页 > 知识库问答 >
问题:

使用jsPlumb重新绘制endpoint

司马越
2023-03-14

我已经被这件事困扰了几天,希望你能帮助我解决这个问题。我创建了一个类似流程图的应用程序来绘制不同类型的铅锤项目,并将不同的endpoint连接到这些项目上。将其创建为元素后,将根据铅锤项目的类型动态添加endpoint。是这样的吗。

这就是我创建铅锤项目的方式。

    var element = document.createElement("div");
    element.setAttribute("id",schema_id);
    element.setAttribute("class","item " +control.Type);
    element.setAttribute("style","left:" +posX + "px ; top: "+posY+"px");

    var output = document.getElementById('container');
    output.appendChild(element);

然后根据endpoint的类型添加endpoint。

    jsPlumb.addEndpoint(element,<the style goes here>,{ anchor:<the location of the endpoint goes here>, uuid: <a new ID is created for this>});

这就是它看起来的样子

屏幕一

我设法从方法“GetConnections”中获取数据,并将其作为JSON保存在DB中。此JSON包括用于铅锤项目和所有endpoint的所有ID。

但是,当我尝试再次将其检索回UI时,它看起来是这样的。除了endpoint之外,一切看起来都很好。

第二屏

在重画时,endpoint的创建方式与上面提到的相同。要重新连接endpoint,我正在使用此代码。

    jsPlumb.connect({ source:<source id>, target:<target id>,anchors:<location of the endpoint>,<style>);

问题是:

对于上面的代码,尽管我将endpoint的UUID提供给了源和目标,但它没有将其标识为要连接的endpoint。

有没有办法找到ID并将其连接起来?我发现只有铅锤项目可以用UUID的“getElementById”搜索,而不是endpoint。

问题是如何使这些endpoint按照最初绘制的方式连接。如何重新连接每个endpoint?我有所有的ID,当它们被重新绘制时,它们的ID与保存时的ID相同。但是我找不到一种方法来分别重新连接endpoint,因为每个铅锤项目都有不同类型的endpoint。

有什么建议吗?

抱歉发了这么长的帖子,提前谢谢!!

共有1个答案

归鸿朗
2023-03-14

请参阅连接方法

如果连接ID、元素或endpoint,请使用

 jsPlumb.connect({source:<source id>, target:<target id>}); 

但是如果你连接两个endpoint的UUID数组使用

jsPlumb.connect({uuids:<array of uuids>});
 类似资料:
  • 我使用一个名为“initJsPlumb”的函数来创建图表,并将其发送到我的ajax数据中,其中包括作为参数的路由和节点信息。 问题是:selectbox触发ajax并从控制器获取数据,然后尝试重新创建jsplumb 并从控制器获取数据,然后使用

  • 问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个

  • 编辑:当我拖动边框时,某种刷新被发送,我需要弄清楚并手动发送相同的刷新。 请注意,我已经尝试使用revalidate()和repaint()。 当使用JFrame和JPanel来显示一个框架时,我试图使框架的大小易于改变。 null 此外,一个重要的注意事项是,当您拖动边框时,白条会消失,并正确地重新加载/刷新内容(即使您只是少量拖动)

  • 我有一个正在添加JLabel的JPanel。然后我想删除所有的JLabel并添加一些新的。 所以我做了以下几点: 这很好。当我在这之后开始一个新线程时,我的问题就出现了,比如: 然后原始JLabels的输出仍然可见。我读到重新验证过程是一个长时间运行的任务,因此firstProducer线程正在启动,而重新验证正在进行并产生冲突。处理这个问题的最佳方法是什么?

  • 有没有什么方法可以等待场景重新绘制? 我的问题是,我想用getChildren()向窗格添加一个注释。add()然后使用Node在此节点上触发事件。fireEvent(事件)。 但这项活动没有进行。我认为问题在于,在fireevent发生时,场景没有被重新绘制,因此此时节点不是新场景的一部分。 所以最好的办法是等待现场重新粉刷,然后启动活动。

  • 我想重新绘制我的屏幕。到目前为止,它所做的只是在第一个屏幕上的头部应该在的地方显示一个点。这很好,但是我在代码中写了我想每秒将头部向下移动10个像素。我正在打印头部应该在的位置,在命令提示符中它显示y值确实在增加。但是在我的屏幕上,头部没有移动。 我尝试过使用revalidate方法,尝试扩展canvas类而不是jframe,我尝试过只为paint方法使用不同的类,我尝试过用paintCompon