jsplumb.connect()使用现有端点而不是创建新端点

时间:2014-03-07 07:53:16

标签: jquery connect endpoint jsplumb

我遇到了jsPlumb.connect函数的问题。我有一个应用程序,用户可以添加<div>元素,获取jsPlumb端点。用户可以将所有这些元素相互连接起来。该图表可以保存在MySQL数据库中(采用JSON格式)。

当用户从数据库加载图表时,我可以使用我的addElement和addEndpoint函数重新创建元素和端点。但是当我调用jsPlumb Connect方法(它只是从数据库中创建图表时),要绘制连接线,它会为每个连接的元素创建一个新的连接点

所以我的问题是,每次调用connect方法时如何防止创建新的Endpoints?

5 个答案:

答案 0 :(得分:12)

在添加端点时,请确保您还根据其放置的元素为其分配uuid。您可以将jsPlumb中的两个端点连接为:

jsPlumb.ready(function () {  
     var e0 = jsPlumb.addEndpoint("container0",{uuid:"ep0"}), //set your own uuid for endpoint to access later.
     e1 = jsPlumb.addEndpoint("container1",{uuid:"ep1"});  
     jsPlumb.connect({ uuids:[e0.getUuid(),e1.getUuid()] }); 
             // (or) 
     jsPlumb.connect({ uuids:["ep0","ep1"] });
});

答案 1 :(得分:1)

虽然很久以前这是一个问题,但它仍然耗费了我很多时间。对于jsplumb的2.5版本,使用uuids的jsplumb.connect()可能会导致错误:无法找到源代码。要解决它,应该使用jsPlumb实例(instance.connect())的范围。

答案 2 :(得分:0)

在添加端点时,请确保您还根据放置的元素为其分配Uuid。您可以将jsPlumb中的两个端点连接为

<script type="text/javascript" src="Jquery\jq.js"></script>
<script type="text/javascript" src="Jquery\jq-ui.min.js"></script> 
<script type="text/javascript" src="jsPlumb-master\build\demo\js\jquery.jsPlumb-1.4.1-all-min.js"></script>

<div id="main">
<div id="block1" class="node">node 0</div>
<div id="block2" class="node">node 1</div>
<div id="block3" class="node">node 2</div>
<div id="block4" class="node">node 3</div> 
</div>

  <script type="text/javascript">

  var targetOption = {anchor:"TopCenter",
  maxConnections:-1,
  isSource:false,
  isTarget:true,
  endpoint:["Dot", {radius:8}],
  paintStyle:{fillStyle:"#66FF00"},
  setDragAllowedWhenFull:true}

  var sourceOption = {anchor:"BottomCenter",
  maxConnections:-1,
  isSource:true,
  isTarget:false,
  endpoint:["Dot", {radius:8}],
  paintStyle:{fillStyle:"#FFEF00"},
  setDragAllowedWhenFull:true}


   jsPlumb.bind("ready", function() {

  jsPlumb.addEndpoint('block1', targetOption);
  jsPlumb.addEndpoint('block1', sourceOption);

  jsPlumb.addEndpoint('block2', targetOption);
  jsPlumb.addEndpoint('block2', sourceOption);

  jsPlumb.addEndpoint('block3', targetOption);
  jsPlumb.addEndpoint('block3', sourceOption);

  jsPlumb.addEndpoint('block4', targetOption);
  jsPlumb.addEndpoint('block4', sourceOption);

  jsPlumb.draggable('block1');
  jsPlumb.draggable('block2');
  jsPlumb.draggable('block3');
  jsPlumb.draggable('block4'); 
  });

  </script>

答案 3 :(得分:0)

这是一个非常老的问题,但是我想我会分享一种不涉及使用UUID的方法:

var endpoint1 = jsPlumb.getEndpoints("id of node1")[0];
var endpoint2 = jsPlumb.getEndpoints("id of node2")[0];
jsPlumb.connect({source: endpoint1, target: endpoint2});

请注意,当每个节点有1个终结点时,这种方法效果最好。但是,如果您可以过滤getEndpoints返回的数组以找到所需的终结点,那么这也可以。

答案 4 :(得分:-1)

我在SO论坛之外从作者本人那里解决了这个问题。

格式正确:

  paintStyle: { 
 stroke:"blue", //renamed to "stroke" from "strokeStyle"
 strokeWidth:10 
}