我想弄清楚如何动态添加端点锚到jsPlumb容器。jsPlumb - 每边动态端点锚
我想只在左侧有源端点,在右侧有目标端点。
问题是,我无法找到任何方法来解决问题,而无需诉诸一些黑客,就像我现在正在做的那样。
jsPlumb支持Continuous Anchors,但单个锚的位置将根据连接器之间的方向和连续锚的数量重新计算。这意味着源端点和目标端点可以共享容器的同一侧,这是我想避免的。
这里是一个jsFiddler code I came up with
这里是我使用的破解,并重新计算锚定位自己的代码的一部分(当添加按钮被点击),具有一定的越野车结果:(
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)只有目标端点,一旦添加了新端点,将根据锚点上的锚点数重新计算锚点e方。
这个工作,但仍然错误:位置只更新一次我移动容器和容器之间的连接也不正确。
我想吃点什么,是为它工作并连接正确的物品(最好使用正确的jsPlumb代码,而不诉诸黑客)
很好:)有没有办法“删除”(选择)节点呢?我将创建一个状态机编辑器w/jsplumb,但只是在动态地添加/删除节点和连接而挣扎。一个jsfiddle将是如此之大:) – Dominik 2013-06-27 08:22:48