Javascript 定义jQuery和jQuery UI之间的依赖关系并不会阻止在jQuery本身之前加载UI
也许有人能解决这个问题 问题: 案例1-为什么IE在jQuery之前加载jQuery UI,即使 JS中的依赖项是否禁止此操作? 这个问题与我的问题相似: 案例2-如果我加载jQuery、jQuery UI并需要JS模块 单独和具体的模块取决于jQuery UI,为什么会这样 模块不知道jQuery UI在需要之前已加载 JS? 下面是对这个问题的详细描述 案例1-所有内容都是Require JS的一个模块 在HTML中,我有: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
<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将停止加载此脚本并转到下一个脚本