Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将requireJS与依赖jquery的库(responsiveIframe)一起使用_Javascript_Jquery_Widget_Requirejs - Fatal编程技术网

Javascript 将requireJS与依赖jquery的库(responsiveIframe)一起使用

Javascript 将requireJS与依赖jquery的库(responsiveIframe)一起使用,javascript,jquery,widget,requirejs,Javascript,Jquery,Widget,Requirejs,我在思考requireJS依赖性管理时遇到了很多麻烦。我已经阅读了大量的文档和所有的在线资源,但我似乎无法让它正常工作 结束场景:我有一个可嵌入的小部件,它最终会将响应iFrame附加到页面上。外部页面假定有jQuery的某些版本,但为了安全起见,我将包含自己的jQuery 我正在使用一个名为的库,它依赖于jQuery 基本上,当我调用$('#responsiveframe').responsiveIframe({xdomain:'*'))时从require函数内部,我得到一个未定义的函数错误。

我在思考requireJS依赖性管理时遇到了很多麻烦。我已经阅读了大量的文档和所有的在线资源,但我似乎无法让它正常工作

结束场景:我有一个可嵌入的小部件,它最终会将响应iFrame附加到页面上。外部页面假定有jQuery的某些版本,但为了安全起见,我将包含自己的jQuery

我正在使用一个名为的库,它依赖于jQuery

基本上,当我调用
$('#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;
        }
    }
}