我正在尝试从纯javascript迁移到Dojo,但遇到了一些问题。我现在的问题是import语句的顺序。在纯javascript中,我可以有一个这样的文件A.js
function(name){
this.name=name;
}以及这样的文件B.js
function(name,age){
this.A=A;
A(name);
this.age=age;
}然后我可以在index.html中加载这两个文件
<html>
<head>
<script LANGUAGE="javascript" SRC="A.js"></script>
<script LANGUAGE="javascript" SRC="B.js"></script>
</head>
</html>或as
<html>
<head>
<script LANGUAGE="javascript" SRC="B.js"></script>
<script LANGUAGE="javascript" SRC="A.js"></script>
</head>
</html>但是如果我将A.js和B.js转换成dojo
dojo.declare("A", null, {
constructor: function(name){
this.name=name;
}
});诸如此类
dojo.declare("B",[A],
constructor:function(name,age){
this.age=age;
}
});然后,我只能这样加载index.html中的脚本
<html>
<head>
<script LANGUAGE="javascript" SRC="A.js"></script>
<script LANGUAGE="javascript" SRC="B.js"></script>
</head>
</html>如果我尝试在A.js之前加载B.js,它会报告A.js不存在。有没有什么办法解决这个问题呢?
发布于 2011-04-08 17:37:17
必须始终在B.js之前加载A.js
您的“普通javascript代码”和"Dojo“之间的区别在于:在”普通代码“中,脚本加载时不执行代码,而在"Dojo”dojo.declare()函数中,脚本加载后立即执行(而且,因为B.js中的脚本需要类"A",所以必须先加载"A.js“中声明的"A.js",才能创建类"A")。
发布于 2011-04-08 18:55:50
如果您决定迁移到Dojo,我建议您使用read about
其主要思想是:
加载所需的JavaScript文件时不需要使用脚本标记。
例如:
你有一个休眠的网站结构:

您可以添加"dojo.js“文件并将其放入”“文件夹中,您可以创建文件夹"MyModules”
在您自己的模块中,您可以定义一些类:
ModuleA的代码:
dojo.provide("Scripts.MyModules.ModuleA");
dojo.declare("A", null, {
constructor: function (name) {
this.name = name;
},
sayName: function () {
alert(this.name);
}
});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);
}
});在每个文件的开头,您可以看到行:
dojo.provide("Scripts.MyModules.ModuleA");
dojo.provide("Scripts.MyModules.ModuleB");dojo.provide是Dojo模块系统及其加载器不可或缺的一部分。dojo.provide()告诉加载程序已经为给定的名称提供了一个模块。它还会为该名称创建一个JavaScript对象。
同样,正如您可以看到的,类B继承自类A。在本例中,您应该在"ModuleB“中添加以下行:
dojo.require("Scripts.MyModules.ModuleA");表示“ModuleB”需要"ModuleA“;
最后,页面上使用此结构的示例如下:
//连接dojo
...
<script src="Scripts/dojo.js" djconfig="parseOnLoad: true"></script>
...//如果要创建对象B,则必须连接第页的ModuleB:
<script type="text/javascript">
dojo.require("Scripts.MyModules.ModuleB");
</script>//创建object B
<script type="text/javascript">
dojo.addOnLoad(function () {
var bObject = new B('John',25);
bObject.sayName();
});
</script>如果使用这个结构,你不需要关心脚本的加载顺序。
另外,对不起,我的“英语”
https://stackoverflow.com/questions/5593101
复制相似问题