2014-11-12 21 views
8

Próbuję utworzyć tablicę, w której użytkownik może dynamicznie dodawać bloki i łączyć bloki z łączami. (Coś jak this ale dynamicznie) Używam framework JointJs i do tej pory wszystko działa zgodnie z oczekiwaniami, ale muszę pokazać trochę informacji, gdy użytkownik łączy dwa bloki. Mój problem polega na tym, że Nie mogę znaleźć zdarzenia do obsługi podczas łączenia bloków.JointJs - event onConnect Link

Zajrzałem w this question, ale w moim przykładzie nie mam instancji linku do dołączenia zdarzenia.

Here widać mój przykład

A oto jak blok są dodawane do tablicy. magnes : true we właściwości text jest tym, co umożliwia połączenie tekstu. Naprawdę potrzebuję pomocy w znalezieniu zdarzenia do obsługi po podłączeniu łącza.

var rect = new joint.shapes.basic.newRect({ 
    position: { x: position, y: position }, 
    size: { width: 100, height: 40 }, 
    attrs: { 
     rect: { 'stroke-width': '1', stroke: 'black', rx: 3, ry: 3, fill: 'blue'}, 
     text: { text: 'Block', magnet: true, } 
    } 
}); 
graph.addCell(rect); 

Spojrzałem też na razie mouseUp i współrzędne, ale wyszedł z niczym .. Naprawdę doceniam pomoc

Odpowiedz

12

W change:source i change:target wydarzenia (jak wszystkie inne zdarzenia wywołane przez modelach komórkowych) propagować do wykresu, więc nie potrzebujesz odniesienia do twoich linków, możesz zrobić coś takiego:

graph.on('change:source change:target', function(link) { 
    if (link.get('source').id && link.get('target').id) { 
     // both ends of the link are connected. 
    } 
}) 
+0

Niesamowite! wielkie dzięki! – BFigueiredo

+2

Czy istnieje sposób na uniknięcie połączenia bez węzła docelowego? – user630522

+0

dave, to będzie strzelać tylko wtedy, gdy połączenie zostanie w pełni wykonane, ale nie wtedy, gdy jeden jego koniec zostanie przecięty. Jaki jest właściwy sposób uzyskania zdarzenia, gdy połączenie jest nawiązywane lub utracone, ale * nie *, jeśli otwarty koniec jest właśnie przenoszony (jak to bywa w przypadku 'change: source' niefiltrowane). –