当前位置: 首页 > 知识库问答 >
问题:

jsPlumb makeSource()和jQuery sortable()不能很好地协同工作

羊舌青青
2023-03-14

我正在创建一个用户界面,允许用户通过拖放界面创建数据库表(及其字段和关系)。

这是我创建的jsFiddle,尽管它看起来有很多事情要做,但实际上它只是演示问题所需的最低限度。以下是我的要求,jsPlumb很好地单独处理了这些要求,但是当我试图把它们放在一起时,我会遇到问题。特别是,它将#2和#3结合在一起是一个问题。

  1. 表格可以在画布上拖动(使用jsPlumb.draggable())
  2. 表中的字段可以通过向上/向下拖动(使用jQuery sortable())重新排序
  3. 用户可以通过拖动来绘制两个不同表的字段之间的新关系
  4. 任何两个表之间的连接线应该自动重新绘制,当表被拖动时,这样它们总是连接到/从最靠近另一个表的任何一边

为了完成#4,我在表示字段的每个“磁贴”上调用jsPlumb.makeSource()和jsPlumb.makeTarget(),而不是在每个磁贴的右侧和左侧创建特定的endpoint。这样,jsPlumb可以管理连接线的重绘,将连接线重绘到“字段”磁贴的更靠近其连接的磁贴的任何一侧。

然而,为了完成#2,我将jQuery sortable应用于字段,为用户提供“拖动重新排序”功能。这就产生了一个冲突,当你点击一个字段时,你在请求哪个“操作”...排序或启动jsPlumb连接?因此,我在每个字段中附加一个红色的div(带有一个“.item-hit.area”类),并在makeSource()调用中添加一个过滤器,这样只有红色的div可以用来创建新的jsPlumb连接。

jsPlumb.makeSource($('.item'), {
    filter:function(event, element) {
        return ($(event.target).hasClass('item_hit_area'));
    }
    ....
}

因此,现在单击红色div会告诉jsPlumb启动连接,或者单击“字段”元素中的任何其他位置会传递给jQuery sortable()。

希望这些要求是明确的。下面是如何重新创建问题。

  • 从Foo 1上的红色磁贴拖动到Bar 2的主体,绘制两个表之间的新关系
  • 拖动fos表(按其标题),以查看#4是否正常工作(所有线条都重新绘制正常)
  • 现在将Foo 1拖动到我所有的脚内的项目列表中,这样它就不是列表中最上面的项目,而是第二或第三个项目。到目前为止还不错,当你拖动时,jsPlumb继续正确更新连接线
  • 当您拖动Fas表来移动它时,问题就出现了。一旦你这样做了,突然连接“福1”和“酒吧2”的线就错了。不幸的是,我在stackoverflow上没有足够的声誉来发布图片。但是试试看,你会看到线跳到了错误的地方。

更奇怪的是,如果你拖动另一个表(“我所有的酒吧”表),连接线会跳回到两端的正确位置。只有当你拖动jsPlumb连接的“源”侧的表时,它才会感到困惑,并在错误的地方画线。

共有1个答案

贺兴平
2023-03-14

问题是jsPlumb缓存了一些可拖动的子元素的偏移量。因此,在排序之后,您需要告诉jsPlumb重新计算这些偏移量,如以下小提琴所示:

http://jsfiddle.net/S7gVa/17/

注意这一行:

        jsPlumb.recalculateOffsets($(ui.item).parents(".draggable"));

在可排序的停止回调中。

 类似资料:
  • 我有一个基本的 VPC,其中包含两个运行 Apache 的 Linux EC2 实例,它们位于经典 ELB 后面。 我想从web应用程序中使用DynamoDB,这要求EC2实例具有出站互联网访问,因为DynamoDBendpoint无法通过后端获得。 我正在使用 ELB 来避免将公有 IP 附加到 EC2 实例,因此我宁愿不附加它们,以便可以访问 DynamoDB。 在这一点上,我被卡住了。 我设

  • 问题内容: 我想在Linux命令行上回显查找的文件名部分。我尝试使用以下内容: 和 以及转义和引用文本各个部分的其他组合。结果是该路径未被剥离: 为什么不? 更新:尽管我在下面有一个可行的解决方案,但我仍然对为什么“基本名称”没有执行应做的事情感兴趣。 问题答案: 您最初尝试的麻烦: 是代码在执行命令之前执行一次。单曲的输出是因为它是文件名的基本名称。因此,由find执行的命令是: 为找到的每个文

  • 什么会导致方法停止工作? 最后一页总是与第一页相反的顺序,怎么会呢?

  • 您可以看到Android Studio预览经常更新。如果你不想处理各种各样的bug,你最好使用一个稳定的版本。 如果你想使用更多的功能,你应该总是保持最新的版本,以避免错误。

  • 我在一个项目中使用Spring Data JPA(1.3.0.Release),并使用Spring(3.2.2.Release),遇到了一个奇怪的问题。我使用的是基于xml的配置,如下所述。 使用此配置扫描所有扩展JParePository的接口。这些接口按以下方式注入到服务类中。 此配置按预期工作,没有任何问题。但是当我添加以下配置时,我得到了UserRepository的BeanCreatio

  • 问题内容: 我浏览了一些帖子,并且阅读了多个JPA不支持接口的地方。有人可以分享真实项目中的含义吗?这是否意味着我们无法为接口添加注释? 问题答案: 这意味着您不能在接口上进行映射(注释)或查询。您只能查询@Entity类,并且只能将它们放在真实类中,而不能放在接口上。通常这不是问题,接口没有状态,因此在大多数情况下与持久性没有真正关系。您仍然可以在模型中使用接口,只是不能直接映射它们。 如果您有