Javascript 将requireJS与依赖jquery的库(responsiveIframe)一起使用
我在思考requireJS依赖性管理时遇到了很多麻烦。我已经阅读了大量的文档和所有的在线资源,但我似乎无法让它正常工作 结束场景:我有一个可嵌入的小部件,它最终会将响应iFrame附加到页面上。外部页面假定有jQuery的某些版本,但为了安全起见,我将包含自己的jQuery 我正在使用一个名为的库,它依赖于jQuery 基本上,当我调用Javascript 将requireJS与依赖jquery的库(responsiveIframe)一起使用,javascript,jquery,widget,requirejs,Javascript,Jquery,Widget,Requirejs,我在思考requireJS依赖性管理时遇到了很多麻烦。我已经阅读了大量的文档和所有的在线资源,但我似乎无法让它正常工作 结束场景:我有一个可嵌入的小部件,它最终会将响应iFrame附加到页面上。外部页面假定有jQuery的某些版本,但为了安全起见,我将包含自己的jQuery 我正在使用一个名为的库,它依赖于jQuery 基本上,当我调用$('#responsiveframe').responsiveIframe({xdomain:'*'))时从require函数内部,我得到一个未定义的函数错误。
$('#responsiveframe').responsiveIframe({xdomain:'*'))时代码>从require
函数内部,我得到一个未定义的函数错误。当我将$
更改为jQuery
时,它会工作,因为它能够使用页面上的现有库(不是我想要的)
以下是代码(假设所有路径都有效):
我尝试过使用各种垫片,如:
shim: {
responsiveIframe: {
init: function() {
return this.responsiveIframe
}
}
}
,
shim: {
'responsiveIframe': ['jquery']
}
,
shim: {
'responsiveIframe': {
'deps': 'jquery',
'exports': 'ResponsiveIframe'
'init': function() {
return this.responsiveIframe.noConflict()
}
}
我觉得我错过了一些关于requireJS的基本信息。任何帮助都将不胜感激,如果您需要更多信息,请告诉我:)
编辑
另外,将我的responsiveiframe.js库包装为:
define(['responsiveIframe', 'jquery'], function(ri, jQuery) {
似乎有用。。。但这似乎是“黑客”
编辑#2
我可以通过如下方式包装responsiveIframe库来实现这一点:
我能够移除所有垫片:
require.config({
baseUrl: 'http://localhost:4000/assets',
paths: {
jquery: 'jquery-1.11.1.min',
responsiveIframe: 'jquery.responsiveiframe'
},
map: {
'*': {'jquery': 'jquery-lc'},
'jquery-lc': {'jquery': 'jquery'}
}
});
。。。这样称呼:
require(['jquery','responsiveIframe'], function($) {
$('#responsive-frame').responsiveIframe({xdomain: '*'});
});
然而,我总是喜欢用“正确”的方式做事,而修改库却让我走错了路
我觉得我应该能够使用shim
正确应用此换行代码…您尝试的上一个shim很接近,但是deps
的值应该是数组而不是字符串。尝试:
shim: {
'responsiveIframe': {
deps: ['jquery']
}
}
这确保在加载和运行ResponseFrame脚本之前加载jquery。您应该这样设置垫片:
shim: {
'responsiveIframe': {
deps: ['jquery'],
exports: '$'
}
}
并将您的模块定义更改为
define(['responsiveIframe'], function($) {
$('#responsive-frame').responsiveIframe({xdomain: '*'});
}
这应该能奏效
UPD.
如果exports
返回不同的jquery,则应将shim修改为:
shim: {
'responsiveIframe': {
deps: ['jquery'],
init: function(jquery) {
return jquery;
}
}
}
这是我的代码中的一个问题,但我有更多的问题,我想:(这是有效的,除了我将define
更改为require
。实际上,我认为这是有效的,但没有…$
引用了错误的jQuery版本(加载初始页面的版本,而不是requireJS).我会继续调查。
define(['responsiveIframe'], function($) {
$('#responsive-frame').responsiveIframe({xdomain: '*'});
}
shim: {
'responsiveIframe': {
deps: ['jquery'],
init: function(jquery) {
return jquery;
}
}
}