Próbuję ustalić sposób dodawania punktów końcowych punktów końcowych dynamicznie do kontenera jsPlumb.jsPlumb - dynamiczne punkty końcowe z każdej strony
Chciałbym mieć końcowe punkty źródłowe po lewej stronie i docelowe punkty końcowe tylko po prawej stronie.
Problem polega na tym, że nie byłem w stanie znaleźć żadnego sposobu, aby to zrobić, bez uciekania się do niektórych hacków, tak jak teraz.
jsPlumb obsługuje Continuous Anchors, ale pozycja poszczególnych kotwic zostanie ponownie obliczona na podstawie orientacji między łącznikami i liczby kotew ciągłych. Oznacza to, że zarówno źródłowe, jak i docelowe punkty końcowe mogą współdzielić tę samą stronę kontenera, jest to coś, czego chciałbym uniknąć.
Oto jsFiddler code I came up with
Oto część kodu używam włamać i przeliczyć kotwica pozycjonuje się (przy kliknięciu przycisku Dodaj), z niektórymi wynikami buggy :(
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);
});
Jak widać na powyższym obrazie, lewa strona ma tylko końcowe punkty źródłowe (Dot) i docelowe punkty końcowe tylko z prawej strony (Box), po dodaniu nowego punktu końcowego kotwice są ponownie obliczane na podstawie liczby zakotwiczeń na e stronie.
Działa to, ale nadal jest błędna: pozycja jest aktualizowana tylko raz, gdy przeniesię kontener, a połączenie między kontenerami również nie jest poprawne.
Co chciałbym mieć, jest sposobem na to, aby pracować i połączyć elementy prawidłowo (najlepiej przy użyciu prawidłowego kodu jsPlumb bez uciekania się do sztuczek)
bardzo dobrze zrobione :) Czy istnieje sposób, aby "usunąć" również (wybrany) węzeł? I tr, aby utworzyć edytor maszyn stanowych w/jsplumb, ale po prostu walcząc w/dynamicznie dodawać/usuwać węzły i połączenia. A jsfiddle byłby taki świetny :) – Dominik