requirejs有时不加载依赖模块并给出错误“jQuery”undefined

时间:2013-12-18 11:46:19

标签: jquery requirejs iscroll

我在我当前的项目中使用requirejs,但有时它不会加载依赖模块并抛出错误“jQuery”未定义...它总是不会发生...如果我刷新页面然后它工作正常。我尝试增加waitSeconds但没有成功。

这里:

require.config({
    paths: {
        'jquery': 'lib/jquery-1.10.2.min',      
        'async': 'lib/async',
        'slider': 'lib/jquery.bxslider.min',
        'fixed-scroll': 'lib/iscroll',
        'validation': 'validation-framework',
        'main-nav': 'main-nav',
        'global': 'global',     
        'page-animate': 'page-details-animation',
        'details': 'page-details',
        'pageMap': 'map'
    },
    shim: {
        'jquery': {
            exports: '$'
        },
        'details': {
            deps: ['jquery']
        },
        'page-animate': {
            deps: ['jquery'],
            exports: 'pageAnimate.init'
        },
        'slider': {
            deps: ['jquery'],
            exports: 'bxSlider'
        },
        'fixed-scroll': {
            exports: 'iScroll'
        },
        'validation': {
            deps: ['jquery']
        }       
    }
});

require(['jquery', 'fixed-scroll', 'page-animate', 'main-nav', 'global', 'details', 'slider', 'pageMap', 'validation'], function () {   
    $('.page-details').pageDetails();   
});

1 个答案:

答案 0 :(得分:3)

根据您报告的错误以及我在问题中看到的内容判断,我建议'details'需要一个垫片:

shim: {
     [...]
    'details': [ 'jquery' ]
}

我推断这是由于$('.page-details').pageDetails()pageDetails必须由jQuery插件提供,并且该插件看起来像(根据使用的名称)将RequireJS声明为{的模块{1}}。您获得的错误与此插件未正确填充一致。一个jQuery插件需要加载jQuery才能自行安装,因此需要依赖。

其他有待了解但不参与错误的事情:

  • jQuery 1.10.x不需要填充。至少从1.8开始就是如此。要求它为'details'(全部小写),你会没事的。

  • 您应该使用'jquery'模块的值,而不是依赖全局'jquery'。所以,不要这样做:

    $

    但是具有与 require(['jquery', ...], function () { $.whatever(); }); 模块对应的名为$的函数参数:

    'jquery'

如果您曾使用require(['jquery', ...], function ($) { $.whatever(); }); 或需要支持多个版本的jQuery(如果您使用需要特定版本的第三方库,则可能会发生这种情况),这将使您的生活更轻松。