68

我刚刚开始使用 Require.JS,我对应该使用它的适当情况以及在这些情况下使用它的正确方法有点不清楚。

以下是我目前使用 Require.JS 进行设置的方式。我有两个功能,functionA()functionB()。这两个功能都需要一个附加功能functionC()才能正常工作。

我只想在必要时加载 functionC(),即要调用 functionA() 或 functionB() 时。所以我有以下文件:

函数C.js

functionC(){
  //do stuff
}

函数A.js

functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}

函数B.js

functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}

那么,这样设置正确吗?如果我最终在同一页面上同时调用 functionA() 和 functionB(),是否需要完成额外的工作,因为它们都加载了 functionC.js 文件?如果是这样,那有问题吗?如果是这样,有没有办法设置它,以便他们首先检查 functionC.js 是否已加载,并且仅在尚未加载时才加载它?最后,这是对 Require.JS 的适当使用吗?

4

2 回答 2

47

define()应该只用于定义一个模块。对于上面的例子,应该动态加载一段代码,使用require()更合适:

函数A.js

functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}

一些注意事项:

  • require([])是异步的,因此如果调用者functionA期望该函数的返回值,则可能会出现错误。最好接受一个在其工作完成functionA时调用的回调。functionA
  • 上面的代码将调用require()每次调用functionA; 但是,在第一次调用之后, load 不会受到惩罚functionC.js,它只会加载一次。第一次require()被调用,它会加载functionC.js,但其余时间,RequireJS 知道它已经加载,所以它会调用该function(functionC){}函数而无需再次请求functionC.js
于 2011-02-07T18:12:29.860 回答
22

您可以在此处找到有关 RequireJS 和 JavaScript 模块化的详细信息:使用 RequireJS 的 JavaScript 模块化(从意大利面条代码到馄饨代码)

于 2012-11-15T08:30:05.747 回答