2014-08-27 59 views
0

我试图在我的应用程序中使用Inview插件,该插件使用RequireJS加载脚本并使用Almond进行构建/优化。我得到一个控制台错误:无法加载使用RequireJS的Inview jQuery插件

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

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访问插件。

+0

是的,就是这样。谢谢你为什么清楚地解释。 – heyscam 2014-08-27 12:04:33