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

jsPlumb加载jQuery EasyUI后不工作(jQueryUI和EasyUI之间的冲突)

呼延辰龙
2023-03-14

我用jsPlumb和jQuery EasyUI遇到了一个真正的问题。

发生了什么。我有一个网站正在使用EasyUI,我试图向它添加一些jsPlumb连接,但是这些连接没有按照我希望的那样运行。

我准备一些演示与jsPlumb只和它的工作。但是当我把它添加到现有的网站连接不起作用。

在调查了冲突发生的地点后,我得出以下结论:

只要我不加载EasyUI,jsPlumb就可以工作。加载EasyUI后:

    <script type="text/javascript" src="jquery.easyui.min.js"></script>
  • 我无法通过拖动源endpoint创建新连接(我拖动endpoint,但现在创建了新连接)

我用JSFIDLE准备了两个演示来说明我的意思。这两个示例唯一不同的地方是jquery.easyui的外部资源

  • 工作jsPlumb全屏结果
  • 不工作:全屏结果

我怎样才能解决这个问题?也许你们中的一些人知道冲突在哪里。在这一点上,我的站点被建议将EasyUI改为其他任何东西,我真的很想使用jsPlumb,因为我找不到任何像这样强大的工具包。

编辑:

正如建议的那样,我已经尝试覆盖draggable,它部分工作,但不是我想要的。

(function($){
    var __old_draggable = $.fn.draggable;
    $.fn.draggable = function(){
        if(this.hasClass('_jsPlumb_endpoint') || this.hasClass('window')){
            return;
        }
        return __old_draggable.apply(this, arguments);
    };
    $.extend($.fn.draggable,__old_draggable);
})(jQuery);

部分原因是:

  • endpoint不再可拖动-这很好,

此外,现在我发现EasyUI覆盖了jQuery draggable,这导致了这种奇怪的(对我来说)行为。遗憾的是,我对强制拖动方法作为原始jQuery方法存在问题。。。所以我期待着为我的问题找到其他解决方案

编辑:我删除了所有与EasyUI中的可拖动和可拖放覆盖及其工作相关的内容。现在的问题是如何在程序中而不是在easyui脚本中执行此操作,因为有人将更新到新版本,所有内容都将停止工作。。。

共有3个答案

祝高超
2023-03-14

覆盖EasyUI$.fn.draggable。尝试在此上检测jsPlumb类,并防止操纵jsPlumb节点。

类似于if(..hasClass('jsPlumbClass'))的返回

也许会有帮助。图书馆不知怎么地有冲突,对此我很抱歉。

柳项明
2023-03-14

有一个jsPlumb的分叉处理EasyUI。也许这有帮助?http://github.com/KodingSykosis/jsPlumb/commits/master

演示源可在https://github.com/KodingSykosis/jsPlumb/tree/master/demo/jeasyui

欧阳衡
2023-03-14

好啊这是对我来说最好的解决方案。

这里发生的是EasyUI可拖动、可删除的方法覆盖了jQueryUI方法。jsPlumb被设计为与jQueryUI一起工作,而不是与EasyUI一起工作。

我发现EasyUI框架提供了方法easyloader,允许您选择加载哪些模块!伟大!我必须稍微改变我的代码,从*. html文档中删除与EasyUI相关的所有内容(因为在创建DOM时不知道EasyUI模块)。

在HTML文档位置

<script type="text/javascript" src="jquery-easyui-1.3.2/easyloader.js"></script>

而不是

<script type="text/javascript" src="jquery-easyui-1.3.2/jquery.easyui.min.js"></script>

然后在您的javascript中,我做了如下操作:

$(function () {
    using(['panel', 'datetimebox', 'tabs', 
            'accordion', 'layout', 'linkbutton',
            'datagrid'], function(){
        initAll.call(this);
    });
});

其中,使用是加载模块的easyloader函数initAll是我的功能,其中EasyUI组件的所有初始化都是例如:

var initAll = function () {
    //initialize all html elements which uses EasyUI
    $('#layout').layout({fit:true});
    $('#tabscontainer').tabs({fit:true, border:false});
    $('#accordion').accordion({fit: true, border:false});
}

您必须注意的唯一一点是,您不能使用依赖于可拖放/可拖放模块的模块使jsPlumb工作。可以在easyloader.js源代码中找到依赖项。对于EasyUI版本1.3.2,它们是:滑块、树、窗口、组合树、对话框、消息器。

 类似资料:
  • 问题内容: 我正在尝试在同时引用 jQueryUI 和 Bootstrap 3 的View 上使用。如果我在jQueryUI的js之后加载Boostrap,则调用成功,但是如果我在Bootstrap之后调用jQueryUI,则出现错误,并且没有任何效果。您可以自己尝试。互联网上对此进行了大量讨论,我询问了有关GitHub的问题,但我还找不到解决方案。 问题答案: 理想的解决方案是采用没有工具提示的

  • 我试图以编程方式建立一些连接。问题是,当绘制连接时,会创建新的endpoint,而现有endpoint不再可单击。我确实有拖动行为的endpoint。我无法让endpoint(由连接创建)具有与原始endpoint相同的属性。 我做了一个工作jsFiddle:http://jsfiddle.net/SCSaf/4/ 在下面的代码中,初始化容器并绘制连接 在公共变量中,我尝试将源endpoint(e

  • 在将OpenSAML从1.1升级到2.6.1(需要xerces-impl依赖项)之后,启动时会出现以下堆栈: xerces-impl重新定义了一些jre类,并附带了重新定义一些jre接口的XML-API。DataType.DataTypeFactoryImpl来自xerces-impl。 我读过用Java/Maven处理“Xerces地狱”?并尝试排除XML-API,但xerces-impl抛出N

  • null JDBC URL:jdbc:ucanaccess://f://workspaceNetbeans/msaccessdb/data/datenbank2.accdb “用户名”和“密码”留空 “测试连接”-按钮会导致错误消息: 无法使用 net.ucanaccess.jdbc.ucanaccessDriver建立到jdbc:ucanaccess://f:\workspaceNetBeans

  • 我正在创建一个用户界面,允许用户通过拖放界面创建数据库表(及其字段和关系)。 这是我创建的jsFiddle,尽管它看起来有很多事情要做,但实际上它只是演示问题所需的最低限度。以下是我的要求,jsPlumb很好地单独处理了这些要求,但是当我试图把它们放在一起时,我会遇到问题。特别是,它将#2和#3结合在一起是一个问题。 表格可以在画布上拖动(使用jsPlumb.draggable()) 表中的字段可

  • 问题内容: 我有一个Java Swing应用程序,其中包含一堆框架,这些框架又主要包含显示大量数据的表。由于在启动时安排所有窗口和表格总是很麻烦并且很费时,我想实现“工作区”功能,以便用户可以保存首选项设置,并在启动时选择自动将存储的工作区加载到所有窗口和表格都显示为先前保存的状态。具体来说,我希望存储在工作空间中的设置是: 活动窗口(JFrame)及其大小和在屏幕上的位置 表设置,包括选定的列,