Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义jQuery和jQuery UI之间的依赖关系并不会阻止在jQuery本身之前加载UI_Javascript_Jquery_Jquery Ui_Requirejs - Fatal编程技术网

Javascript 定义jQuery和jQuery UI之间的依赖关系并不会阻止在jQuery本身之前加载UI

Javascript 定义jQuery和jQuery UI之间的依赖关系并不会阻止在jQuery本身之前加载UI,javascript,jquery,jquery-ui,requirejs,Javascript,Jquery,Jquery Ui,Requirejs,也许有人能解决这个问题 问题: 案例1-为什么IE在jQuery之前加载jQuery UI,即使 JS中的依赖项是否禁止此操作? 这个问题与我的问题相似: 案例2-如果我加载jQuery、jQuery UI并需要JS模块 单独和具体的模块取决于jQuery UI,为什么会这样 模块不知道jQuery UI在需要之前已加载 JS? 下面是对这个问题的详细描述 案例1-所有内容都是Require JS的一个模块 在HTML中,我有: <script src="/scripts/lib

也许有人能解决这个问题

问题:

案例1-为什么IE在jQuery之前加载jQuery UI,即使 JS中的依赖项是否禁止此操作? 这个问题与我的问题相似: 案例2-如果我加载jQuery、jQuery UI并需要JS模块 单独和具体的模块取决于jQuery UI,为什么会这样 模块不知道jQuery UI在需要之前已加载 JS? 下面是对这个问题的详细描述

案例1-所有内容都是Require JS的一个模块

在HTML中,我有:

<script 
    src="/scripts/libs/require.min.js"
    data-main="/scripts/application.js">
</script>
require.config({
    paths: {

        libsJQ: 'libs/jquery.min',
        libsUI: 'libs/jquery.ui.min',
        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
},
    shim: {

        libsUI: { deps: ['libsJQ'] },
        libsMouse: { deps: ['libsUI'] },
        modulesVideo: { deps: ['libsUI'] }
});
define(function(require) {

    return {

        setup: function() {

            var s = this;

            s.link = $('.content-link');
            s.popup = $('.video');

            s.popup.dialog({
                autoOpen: false,
                show: { effect: 'fade', duration: 500 },
                hide: { effect: 'fade', duration: 500 }
            });

            s.link.bind('click', function() {
                s.popup.dialog('open');
            });
        }
});
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.min.js"></script>
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.ui.min.js"></script>

<script 
    src="<?php print sonifi_assets() ?>/scripts/libs/require.min.js"
    data-main="<?php print sonifi_assets() ?>/scripts/application.js">
</script>
require.config({
    paths: {

        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
});
在modules/video.js中,我有:

<script 
    src="/scripts/libs/require.min.js"
    data-main="/scripts/application.js">
</script>
require.config({
    paths: {

        libsJQ: 'libs/jquery.min',
        libsUI: 'libs/jquery.ui.min',
        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
},
    shim: {

        libsUI: { deps: ['libsJQ'] },
        libsMouse: { deps: ['libsUI'] },
        modulesVideo: { deps: ['libsUI'] }
});
define(function(require) {

    return {

        setup: function() {

            var s = this;

            s.link = $('.content-link');
            s.popup = $('.video');

            s.popup.dialog({
                autoOpen: false,
                show: { effect: 'fade', duration: 500 },
                hide: { effect: 'fade', duration: 500 }
            });

            s.link.bind('click', function() {
                s.popup.dialog('open');
            });
        }
});
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.min.js"></script>
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.ui.min.js"></script>

<script 
    src="<?php print sonifi_assets() ?>/scripts/libs/require.min.js"
    data-main="<?php print sonifi_assets() ?>/scripts/application.js">
</script>
require.config({
    paths: {

        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
});
我需要JS,包括jQuery、jQuery UI和依赖于它们的几个模块

2一些模块完全依赖于jQuery UI,例如在弹出窗口中显示视频的模块

3如果我尝试将所有内容作为Require JS的模块加载,那么在所有浏览器中,所有内容似乎都可以正常工作,依赖项也可以正常工作,但在IE中,我不时会遇到这样的错误

SCRIPT438: Object doesn't support property or method 'dialog'
SCRIPT438: Object doesn't support property or method 'easeOutQuad' 
这意味着独立于垫片依赖项,有时候IE jQuery UI中的加载速度比jQuery快

案例2-在需要JS之前,需要包括jQuery和jQuery UI

在HTML中,我有:

<script 
    src="/scripts/libs/require.min.js"
    data-main="/scripts/application.js">
</script>
require.config({
    paths: {

        libsJQ: 'libs/jquery.min',
        libsUI: 'libs/jquery.ui.min',
        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
},
    shim: {

        libsUI: { deps: ['libsJQ'] },
        libsMouse: { deps: ['libsUI'] },
        modulesVideo: { deps: ['libsUI'] }
});
define(function(require) {

    return {

        setup: function() {

            var s = this;

            s.link = $('.content-link');
            s.popup = $('.video');

            s.popup.dialog({
                autoOpen: false,
                show: { effect: 'fade', duration: 500 },
                hide: { effect: 'fade', duration: 500 }
            });

            s.link.bind('click', function() {
                s.popup.dialog('open');
            });
        }
});
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.min.js"></script>
<script type="text/javascript" src="/themes/sonifi/scripts/libs/jquery.ui.min.js"></script>

<script 
    src="<?php print sonifi_assets() ?>/scripts/libs/require.min.js"
    data-main="<?php print sonifi_assets() ?>/scripts/application.js">
</script>
require.config({
    paths: {

        libsMouse: 'libs/jquery.mousewheel.min',
        modulesVideo: 'modules/video'
});
现在,我在所有浏览器中都会遇到此错误:

NetworkError: 404 Not Found - http://sonifi.web/themes/sonifi/scripts/jquery.js
Error: Script error for: jquery http://requirejs.org/docs/errors.html#scripterror
Error: Load timeout for modules: modulesVideo

似乎Require JS希望将jQuery包含为其模块,否则,如果它没有jQuery配置,但它有依赖于jQuery的模块,它会试图在绝对错误的目录中找到它,当然在那里找不到它。

在我的情况下,我只需要增加超时时间,让脚本有机会加载自己只有在这之后,才能继续加载其依赖项。如果超时时间足够短,requirejs将停止加载此脚本并转到下一个脚本