Dojo类加载顺序

puk*_*puk 1 javascript dojo

我试图从纯JavaScript迁移到Dojo,我遇到了一些问题.我当前的问题是import语句的顺序.在纯JavaScript我能有一个文件,A.js这样

function(name){
    this.name=name;
}
Run Code Online (Sandbox Code Playgroud)

和文件B.js一样

function(name,age){
    this.A=A;
    A(name);
    this.age=age;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以在加载这两个文件index.html可以是本身

<html>
    <head>
    <script LANGUAGE="javascript" SRC="A.js"></script>
    <script LANGUAGE="javascript" SRC="B.js"></script>
    </head>
</html>
Run Code Online (Sandbox Code Playgroud)

或者作为

<html>
    <head>
    <script LANGUAGE="javascript" SRC="B.js"></script>
    <script LANGUAGE="javascript" SRC="A.js"></script>
    </head>
</html>
Run Code Online (Sandbox Code Playgroud)

但如果我转换A.jsB.jsdojo这样

dojo.declare("A", null, {
    constructor: function(name){
        this.name=name;
    }
});
Run Code Online (Sandbox Code Playgroud)

等等

dojo.declare("B",[A],
    constructor:function(name,age){
        this.age=age;
    }
});
Run Code Online (Sandbox Code Playgroud)

那我只能加载脚本index.html这样

<html>
    <head>
    <script LANGUAGE="javascript" SRC="A.js"></script>
    <script LANGUAGE="javascript" SRC="B.js"></script>
    </head>
</html>
Run Code Online (Sandbox Code Playgroud)

如果我B.js之前尝试加载A.js,它会抱怨A.js不存在.有没有办法解决?

And*_*rei 5

如果您决定迁移到Dojo,我建议您阅读

  1. dojo.provide()
  2. dojo.require()
  3. dojo.declare()

这个的主要想法是休耕:

您无需使用脚本标记来加载所需的JavaScript文件.

例如:

您有以下网站结构:

在此输入图像描述

  1. 您添加"dojo.js"文件并将其放在"脚本"文件夹中
  2. 您创建文件夹"MyModules"和...
  3. 你创建了2个自己的模块"ModuleA"和"ModuleB"

在您自己的模块中,您可以定义一些类:

代码"ModuleA":

dojo.provide("Scripts.MyModules.ModuleA");

dojo.declare("A", null, {
    constructor: function (name) {
        this.name = name;
    },

    sayName: function () {
        alert(this.name);
    }
});
Run Code Online (Sandbox Code Playgroud)

代码"ModuleB":

dojo.provide("Scripts.MyModules.ModuleB");
dojo.require("Scripts.MyModules.ModuleA");

dojo.declare("B", [A], {
    constructor: function (name, age) {
        this.age = age;
    },
    sayName: function () {
        alert(this.name + " " + this.age);
    }
});
Run Code Online (Sandbox Code Playgroud)

在每个文件的开头,您可以看到行:

dojo.provide("Scripts.MyModules.ModuleA");
dojo.provide("Scripts.MyModules.ModuleB");
Run Code Online (Sandbox Code Playgroud)

dojo.provide是Dojo模块系统及其加载器的组成部分.dojo.provide()告诉加载器已为给定名称提供了a模块.它还为名称创建JavaScript对象.

另外你可以看到继承自A类的B类.在这种情况下,在"ModuleB"中你应该添加这一行:

dojo.require("Scripts.MyModules.ModuleA");
Run Code Online (Sandbox Code Playgroud)

这意味着"ModuleB"需要"ModuleA";

最后,在页面上使用此结构的示例:

//连接dojo

...
<script src="Scripts/dojo.js" djconfig="parseOnLoad: true"></script>
...
Run Code Online (Sandbox Code Playgroud)

//如果要创建对象B,则必须在页面上连接ModuleB:

<script type="text/javascript">
dojo.require("Scripts.MyModules.ModuleB");
</script>
Run Code Online (Sandbox Code Playgroud)

//创建对象B.

<script type="text/javascript">
    dojo.addOnLoad(function () {
      var bObject = new B('John',25);
        bObject.sayName();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

如果使用此结构,您不需要关心脚本加载顺序.

对不起我的"英语"