我正在创建一个用户界面,允许用户通过拖放界面创建数据库表(以及它们的字段和关系)。
这是我创建的jsFiddle,虽然它看起来有很多事情发生,但实际上它只是演示问题所必需的最小值。下面是我的需求,jsPlumb分别很好地处理这些需求,但是当我尝试将它们全部处理在一起时,我会遇到问题。特别是,合并#2和#3是一个问题。
为了完成#4,我在每个表示字段的“平铺”上调用jsPlumb.makeSource()和jsPlumb.makeTarget(),而不是在每个块的右侧和左侧创建特定的端点。这样,jsPlumb就可以管理将连接线重绘到与其连接的瓷砖更接近的“字段”瓷砖的任何一侧。
但是,为了完成#2,我将jQuery排序应用到字段中,以赋予用户“拖动到重新排序”的功能。当您单击field...sorting或启动jsPlumb连接时,这会产生冲突,说明您请求的是哪个“操作”?因此,我向每个字段追加了一个红色div (带有一个“.itt-hit.rea”类),并向makeSource()调用添加了一个筛选器,以便只有红色div可以用来创建一个新的jsPlumb连接。
jsPlumb.makeSource($('.item'), {
filter:function(event, element) {
return ($(event.target).hasClass('item_hit_area'));
}
....
}
因此,现在单击红色div告诉jsPlumb启动一个连接,或者单击"field“元素中的其他任何位置将传递给jQuery sortable()。
希望这些要求是明确的。下面是如何重新创建这个问题。
奇怪的是,如果您拖动另一个表(“所有我的酒吧”表),连接线会跳回两端正确的位置。只有当您拖动位于jsPlumb连接的“源”端的表时,它才会感到困惑,并在错误的位置画线。
发布于 2013-11-20 02:03:44
问题是,jsPlumb缓存某些可拖放的子元素的偏移量。因此,排序之后,您需要告诉jsPlumb重新计算这些偏移量,如下所示:
请注意这一行:
jsPlumb.recalculateOffsets($(ui.item).parents(".draggable"));
在可排序的停止回调中。
https://stackoverflow.com/questions/19781506
复制