2015-05-13 1 views
1

Я использую jointjs, и, как говорится в вопросе, мне нужно ограничить количество допустимых подключений к каждому входу максимум одному. Если вход уже подключен к выходу, тогда он не должен допускать никаких дополнительных попыток подключения, пока существующее соединение не будет изменено или не удалено.В суставах, как я могу ограничить количество подключений к каждому входу только одному?

Я полагаю, что мне нужно изменить функцию validateConnection, поэтому мне интересно, есть ли способ проверить переменную magnetT для существующего соединения? Что-то вроде

if(magnetT.connected) return false; 

Возможно, путем передачи пользовательского атрибута порту при связывании.

on.link(){ 
target.connected = true; 
} 

или что-то в этом духе. Очевидно, что это псевдокод, поэтому, если есть предложения по другому пути решения этой проблемы, я все уши. Заранее благодарю за любую помощь!

ответ

2

Вы правы, что функция validateConnection вызывается, когда вы рисуете ссылку, чтобы определить, можно ли установить соединение с целью или нет. В этой функции вы можете делать все, что хотите. Другая полезная функция - это validateMagnet, который определяет, может ли провод быть нарисован или нет, когда пользователь нажимает на магнит.

Я не думаю, что jointJS имеет API для соединения ссылок с элементом или портом. Что вы можете сделать, так это получить все ссылки на бумаге, проверить, подключен ли источник или цель какой-либо ссылки к magnetT. Если он подключен, верните значение false.

Вот код:

validateMagnet: function(cellView, magnet){ 
    var links = graph.getLinks(); 
    for (var i = 0; i < links.length; i++){ 
     if(((cellView.model.id == links[i].get('source').id) && (magnet.getAttribute('port') == links[i].get('source').port))|| 
     ((cellView.model.id == links[i].get('target').id) && (magnet.getAttribute('port') == links[i].get('target').port))) 
     return false; 
    } 
    return true; 
}, 
validateConnection: function(cellViewS, magnetS, cellViewT, magnetT, end, linkView){ 
    var links = graph.getLinks(); 
    for (var i = 0; i < links.length; i++) 
    { 
     if(linkView == links[i].findView(paper)) //Skip the wire the user is drawing 
     continue; 

     if (((cellViewT.model.id == links[i].get('source').id) && (magnetT.getAttribute('port') == links[i].get('source').port)) || 
     ((cellViewT.model.id == links[i].get('target').id) && (magnetT.getAttribute('port') == links[i].get('target').port))){ 
      return false; 
     } 
    } 
    return true; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^