0

因此,单击按钮后,我想显示一个包含指向 youtube 链接的灯箱。

我在我的项目中使用 requirejs 和 lightbox,但出现错误:“未捕获的 TypeError:对象函数 (e,t){return new x.fn.init(e,t,r)} has no method 'colorbox'”

我认为该功能找不到 Colorbox,但我不知道为什么。

这是我的文件:openYoutubeLink:

define( [ 'modules/common/preferences' ], function ( preferences ) {
  return function () {
    $.colorbox({width:"900px", height:"600px", iframe:true, href:"youtube.de"});
  };
});

这是我的 main.js 的一部分,带有 require.config:

paths: {
    colorbox : 'libs/jquery/jquery.colorbox-min'
}

shim: {
    'colorbox' : { deps: [ 'jquery' ], exports: 'jquery' }
}
4

1 回答 1

0

我会让主模块需要 jQuery 和 colorbox 插件。我需要它们,以便我确定在我的模块执行时它们都已加载。目前,看起来您已经$定义了全局,但这看起来像是偶然而不是设计。

所以修改后它看起来像这样:

define(['modules/common/preferences', 'jquery', 'colorbox'], 
       function (preferences, $) {
  return function () {
    $.colorbox({width:"900px", height:"600px", iframe:true, href:"youtube.de"});
  };
});

另外,我不认为这是您当前问题的根源,但我应该提到exports这里是错误的:

shim: {
    'colorbox' : { deps: [ 'jquery' ], exports: 'jquery' }
}

您希望有一个特定于正在填充的模块的符号。例如,我使用 jQuery 的 cookie 插件并像这样填充它:

'jquery.cookie': { deps: ["jquery"], 出口: "jQuery.cookie" }

jQuery.cookie是一个符号,当且仅当文件jquery.cookie已正确加载和执行时才定义。

(kryger 建议不要定义exports. 虽然 RequireJS 文档确实说像 jQuery 或 Backbone 之类的插件不需要exports定义,但相同的文档随后提到如果没有定义,则错误条件的检测将exports不起作用使用过。我认为最佳实践是始终定义一个exports而不是等到最终问题出现。)

于 2013-11-11T18:06:30.693 回答