2011-01-22 27 views
66

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

以下是我如何使用Require.JS设置的东西。我有两个功能,functionA()functionB()。这两个功能都需要额外的功能,functionC()才能正常工作。

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

functionC.js

functionC(){ 
    //do stuff 
} 

functionA.js

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

functionB.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的适当使用吗?

回答

44

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

functionA.js

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

一些注意事项:

  • require([])是异步的,因此如果functionA的调用者期望从该功能返回值,则可能会出现错误。最好是functionA接受在functionA完成其工作时调用的回叫。
  • 对于functionA的每个调用,上述代码将调用require();但是,在第一次通话后,加载functionC.js不会受到任何惩罚,它只会加载一次。第一次调用require()时,它会加载functionC.js,但其余时间RequireJS知道它已经加载,所以它会在不请求functionC.js的情况下调用function(functionC){}函数。
+1

感谢您的答复 - 它有很大帮助。 define()和require()是我需要澄清的事情,而你的其他两个要点真的有很大的帮助。我认为首要的要点是我仍然需要更好地理解 - 如何正确处理RequireJS的异步特性。 – maxedison 2011-02-08 14:13:40

相关问题