簡體   English   中英

RequireJS-導出一組功能

[英]RequireJS - Exporting a Set of Functions

我遇到了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) {

這是發生了什么:

  1. define調用被執行。 RequireJS看到一個模塊名稱( mySubFile ),一個依賴項列表['jquery']和一個回調。
  2. RequireJS解析jquery並使用它調用回調。
  3. require調用已執行。 RequireJS看到一個依賴項列表和一個回調。
  4. RequireJS解析dependency1並調用回調。

同樣,在這里,必須先解析jquery ,然后才能返回任何內容。 define回調中包含一個require不會對此進行任何更改。

require調用放入define以按您想要的方式工作將需要大量重寫。 順便說一下,您遇到的問題並非特定於RequireJS,而是所有異步代碼共有的問題。 這個問題的普遍問題和方法吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM