相关疑难解决方法(0)

如何使用RequireJS/AMD处理循环依赖?

在我的系统中,我在浏览器中加载了许多"类",每个文件在开发过程中都是单独的文件,并连接在一起进行生产.在加载它们时,它们会在全局对象上初始化一个属性G,如下例所示:

var G = {};

G.Employee = function(name) {
    this.name = name;
    this.company = new G.Company(name + "'s own company");
};

G.Company = function(name) {
    this.name = name;
    this.employees = [];
};
G.Company.prototype.addEmployee = function(name) {
    var employee = new G.Employee(name);
    this.employees.push(employee);
    employee.company = this;
};

var john = new G.Employee("John");
var bigCorp = new G.Company("Big Corp");
bigCorp.addEmployee("Mary");
Run Code Online (Sandbox Code Playgroud)

我没有使用自己的全局对象,而是根据James Burke的建议,考虑让每个类都有自己的AMD模块:

define("Employee", ["Company"], function(Company) {
    return function (name) {
        this.name = name;
        this.company = new …
Run Code Online (Sandbox Code Playgroud)

javascript commonjs requirejs

78
推荐指数
6
解决办法
3万
查看次数

了解何时以及如何使用Require.JS

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

以下是我目前使用Require.JS设置的方法.我有两个功能,functionA()functionB().这两个功能都需要额外的功能functionC()才能正常工作.

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

functionC.js

functionC(){
  //do stuff
}
Run Code Online (Sandbox Code Playgroud)

functionA.js

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

functionB.js

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

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

javascript requirejs

68
推荐指数
2
解决办法
3万
查看次数

标签 统计

javascript ×2

requirejs ×2

commonjs ×1