我遇到了jsPlumb.connect函数的问题。我有一个应用程序,用户可以添加<div>
元素,获取jsPlumb端点。用户可以将所有这些元素相互连接起来。该图表可以保存在MySQL数据库中(采用JSON格式)。
当用户从数据库加载图表时,我可以使用我的addElement和addEndpoint函数重新创建元素和端点。但是当我调用jsPlumb Connect方法(它只是从数据库中创建图表时),要绘制连接线,它会为每个连接的元素创建一个新的连接点
所以我的问题是,每次调用connect方法时如何防止创建新的Endpoints?
答案 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
}