我试图避免链接在空间中结束,我想只允许链接将一个元素与另一个元素连接起来。我目前的代码是:
new joint.shapes.basic.Rect({
id: id,
size: {
width: width,
height: height
},
attrs: {
text: {
text: label,
'font-size': letterSize
},
rect: {
width: width,
height: height,
rx: 5,
ry: 5,
stroke: '#555',
'magnet': true
}
}
});
对于论文:
var paper = new joint.dia.Paper({
el: $('#paper-basic'),
width: 1250,
height: 1000,
model: graph,
gridSize: 1,
validateConnection: function(cellViewS, magnetS, cellViewT, magnetT, end, linkView) {
// Prevent linking from output ports to input ports within one element.
if (cellViewS === cellViewT) return false;
// Prevent linking to input ports.
return magnetT;
},
markAvailable: true
});
如何要求每个链接都有源和目标?也许通过延长validateConnection
?
答案 0 :(得分:4)
如果这仍然相关,现在linkPinning
元素上有一个名为Paper
的选项:
http://jointjs.com/api#dia.Paper.prototype.options
linkPinning - 设置为true(默认值)时,可以固定链接 本文意味着链接的来源或目标可以是一个点。如果你 不想让用户拖动链接并将其放在某处 空白区域,将此设置为false。效果是链接会 每当用户放下它时,它将返回其原始位置 在空白区域的某个地方。
答案 1 :(得分:2)
验证连接仅有助于验证磁铁,当链接末端位于纸张上的随机空间时,它不会被调用。您可以使用以下内容删除不完整的链接:
// keep links from being incomplete
function isLinkInvalid(link){
return (!link.prop('source/id') || !link.prop('target/id'));
}
paper.on('cell:pointerup', function(cellView) {
if (! (cellView.model instanceof joint.dia.Link) ) return; // if it's not a link, don't worry about it
// otherwise, add an event listener to it.
cellView.model.on('batch:stop', function(){
var links = graph.getLinks();
links.forEach(function(link){
if(isLinkInvalid(link)){
link.remove();
}});
});
});
它向链接添加了一个eventListener。在'cell:pointerup'
上执行此操作非常重要,因为在创建链接时会调用'batch:stop'
。如果链接没有目标ID,则它不会连接到端口。
答案 2 :(得分:1)
组合@Anora s和https://groups.google.com/forum/#!topic/jointjs/vwGWDFWVDJI
稍微不同/较短的答案paper.on('cell:pointerup', function (cellView, evt) {
var elem = cellView.model
var source = elem.get('source')
var target = elem.get('target')
if (elem instanceof joint.dia.Link && (!source.id || !target.id)) {
elem.remove()
}
})