Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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-导出一组函数_Javascript_Jquery_Dependency Injection_Requirejs_Dependencies - Fatal编程技术网

Javascript RequireJS-导出一组函数

Javascript RequireJS-导出一组函数,javascript,jquery,dependency-injection,requirejs,dependencies,Javascript,Jquery,Dependency Injection,Requirejs,Dependencies,我遇到了RequireJS问题,当我有require语句时,我无法导出一组函数 假设我有一个名为mySubFile.js的文件,其中,首先需要注入jQuery,然后是另一个依赖项。现在,假设我有myFunction,我想导出它以便从另一个文件调用它 define('mySubFile', ['jquery'], function ($) { require(['dependency1'], function (dependency1) { let myFunction =

我遇到了RequireJS问题,当我有require语句时,我无法导出一组函数

假设我有一个名为mySubFile.js的文件,其中,首先需要注入jQuery,然后是另一个依赖项。现在,假设我有myFunction,我想导出它以便从另一个文件调用它

define('mySubFile', ['jquery'], function ($) {
    require(['dependency1'], function (dependency1) {

       let myFunction = function(){ return "Hey There"; }

       return : {
                    myFunction : myFunction
       }

    });
});
现在假设我想从myFile.js调用该函数:

define('myFile', ['jquery'], function ($) {
    require(['mySubFile'], function (mySubFile) {

       console.log(mySubFile.myFunction());

    });
});
这是行不通的。我得到:

无法读取未定义的属性“myFunction”

另一方面,如果我定义mySubFile.js如下:

define('mySubFile', ['jquery', 'dependency1'], function ($, dependency1) {

   let myFunction = function(){ return "Hey There"; }

   return : {
               myFunction : myFunction
   }

});
我可以访问myFunction,但我需要首先解析jQuery

我正在努力寻找解决方案,但仍然没有找到任何东西


我如何解决这个问题?

如果您总是需要jQuery在模块之前可用,您可以这样做:

define("mySubFile", function(require, exports, module){ 
    var a = require("jQuery"), // dependency
        b = require("knockout"); // dependency
    /* rest of the code for this module */ 

    let myFunction = function(){ return "Hey There"; }

   return : {
            myFunction : myFunction
         }
}); 

考虑到您在问题中显示的代码,这确实是一条正确的道路:

define('mySubFile', ['jquery', 'dependency1'], function ($, dependency1) {
但您不想使用它,因为:

可以访问myFunction,但我需要首先解析jQuery

当然,在返回值之前必须先解析
jquery
,但是让我们先假设有一种神奇的方法可以让您的其他尝试返回您想要的值,让我们从何时解析的角度来看它。这就是你所拥有的:

define('mySubFile', ['jquery'], function ($) {
    require(['dependency1'], function (dependency1) {
下面是发生的情况:

  • 执行
    define
    调用。RequireJS看到一个模块名(
    mySubFile
    ),一个依赖项列表
    ['jquery']
    ,以及一个回调
  • RequireJS解析
    jquery
    ,并用它调用回调
  • 执行
    require
    调用。RequireJS看到一个依赖项列表和一个回调
  • RequireJS解析依赖关系1并调用回调
  • 在这里,
    jquery
    也必须先解析,然后才能返回任何内容。在
    define
    回调中使用
    require
    不会改变任何情况


    define
    中获得
    require
    调用以您想要的方式工作将需要大量重写。顺便说一句,您遇到的问题不是特定于RequireJS的,而是所有异步代码都存在的问题。有关一般问题及其解决方法,请参阅。

    您的意思是在mySubFile模块之前需要jquery?@NiteshI需要先注入jquery。问题不是由jquery引起的,我已经能够在其他任何事情之前获得它。在从另一个文件访问外部函数时,如果该子文件有require语句,我会遇到一个问题。感谢您的解释。我知道问题的异步性。如果我真的像你开始说的那样,我没有任何未定义的问题,但是我的应用程序只是在某种程度上崩溃了,因为我没有首先解决jquery。我正在看一看您链接的问题,但找不到先解决jquery的方法。可能使用$document(ready)?我不清楚您为什么会遇到问题<在调用对
    define
    的回调之前,解析code>jquery。如果
    dependency1
    也依赖于
    jquery
    ,那么您需要将
    jquery
    放在它的依赖项列表中:在它的
    define
    调用中,或者如果它是第三方非AMD代码段,您需要在RequireJS配置中设置一个
    shim
    ,将
    jquery
    列为依赖项。例如,现在我遇到了一个问题,我必须触发一个给定函数,该函数位于$(document).ready之后的另一个js文件中,但不知何故我得到了externalFile.thatFunction()未定义,因为externalFile似乎与jQuery同时得到解决。