Я пытаюсь выяснить способ добавления динамиков конечных точек динамически в контейнер jsPlumb.
Я хотел бы иметь исходные конечные точки с левой стороны и конечные точки цели только с правой стороны.
Проблема в том, что я не смог найти способ сделать это, не прибегая к некоторым хакам, как я сейчас делаю.
jsPlumb поддерживает Continuous Anchors, но позиция отдельного якоря будет пересчитываться на основе ориентации между разъемами и количеством непрерывных якорей. Это означает, что конечные точки источника и цели могут делиться одной и той же стороной контейнера, этого я бы хотел избежать.
Вот код jsFiddler, с которым я придумал
Вот часть кода, который я использую для взлома и пересчета позиций привязки (при нажатии кнопки "Добавить" ) с некоторыми ошибками: (
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, не прибегая к хакам)