我正在尝试找出一种如何将端点锚动态添加到 jsPlumb 容器的方法。
我希望源端点位于左侧,目标端点仅位于右侧。
问题是,我无法找到任何方法来做到这一点,而无需求助于一些黑客,就像我现在正在做的那样。
jsPlumb 支持连续锚点,但单个锚点的位置将根据连接器之间的方向和连续锚点的数量重新计算。这意味着源端点和目标端点都可以共享容器的同一侧,这是我想避免的。
这是我自己用来破解和重新计算锚点位置的代码的一部分(单击“添加”按钮时),结果有一些错误:(
function fixEndpoints(endpoints) {
//there are 2 types - input and output
var inputAr = $.grep(endpoints, function (elementOfArray, indexInArray) {
return elementOfArray.isSource; //input
});
var outputAr = $.grep(endpoints, function (elementOfArray, indexInArray) {
return elementOfArray.isTarget; //output
});
calculateEndpoint(inputAr, true);
calculateEndpoint(outputAr, false);
}
function calculateEndpoint(endpointArray, isInput) {
//multiplyer
var mult = 1 / endpointArray.length;
for (var i = 0; i < endpointArray.length; i++) {
if (isInput) {
endpointArray[i].anchor.x = 1;
endpointArray[i].anchor.y = mult * i;//, 1, 0] };
}
else {
endpointArray[i].anchor.x = 0;
endpointArray[i].anchor.y = mult * i;//, -1, 0] };
}
}
}
//Add additional anchor
$(".button_add").live("click", function () {
var parentnode = $(this)[0].parentNode.parentNode;
jsPlumb.addEndpoint(
parentnode,
anEndpointSource
);
jsPlumb.addEndpoint(
parentnode,
anEndpointDestination
);
//get list of current endpoints
var endpoints = jsPlumb.getEndpoints(parentnode);
//fix endpoints
fixEndpoints(endpoints);
jsPlumb.recalculateOffsets();
jsPlumb.repaint(parentnode);
});
如上图所示,左侧只有源端点(Dot),右侧(Box)只有目标端点,一旦添加了新端点,就会根据一侧的锚点数量重新计算锚点。
这可行,但仍然有问题:只有在我移动容器并且容器之间的连接也不正确时才会更新位置。
我想要的是一种让它正确工作和连接项目的方法(最好使用正确的 jsPlumb 代码而不求助于黑客)