无法使用RequireJS加载inview jQuery插件

时间:2014-08-27 10:20:16

标签: jquery requirejs bower almond inview

我尝试在我的应用中使用inview插件,该插件使用RequireJS加载脚本,并使用Almond进行构建/优化。我收到一个控制台错误:

TypeError: 'undefined' is not an object (evaluating 'global.jquery.inview')

似乎来自垫片需要添加到inview文件的末尾:

define("jquery.inview", ["jquery"], (function (global) {
    return function () {
        var ret, fn;
        return ret || global.jquery.inview;
    };
}(this)));

我的需求配置如下:

require.config({
    paths: {
        'jquery': '../../bower_components/jquery/dist/jquery',
        'text': '../../bower_components/requirejs-text/text',
        'tweenmax': '../../bower_components/greensock/src/uncompressed/TweenMax',
        'jquery.inview': '../../bower_components/jquery.inview/jquery.inview'
    },
    shim: {
        "jquery.inview": {
            deps: ['jquery'],
            exports: 'jquery.inview'
        }
    }
});

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

jquery.inview是一个jQuery插件。因此,它通过修改$将其自身安装为插件。当您告诉RequireJS它导出jquery.inview时,RequireJS会尝试解析全局空间中的jquery.inview,这不起作用,因为jQuery可以在全局空间中作为$jQuery访问,而不是jquery

您可以将exports保留或将其设置为jquery.inview确定的内容。例如,阅读jquery.inview的代码我发现它设置了$.event.special.inview,因此您可以在exports中使用此代码。

如果您想知道,对于jQuery插件,exports值仅对RequireJS的簿记有用。你不是自己通过它导出的值访问插件,而是通过它通过jQuery公开的API。