我试图从纯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.js和B.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不存在.有没有办法解决?
如果您决定迁移到Dojo,我建议您阅读
这个的主要想法是休耕:
您无需使用脚本标记来加载所需的JavaScript文件.
例如:
您有以下网站结构:

在您自己的模块中,您可以定义一些类:
代码"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)
如果使用此结构,您不需要关心脚本加载顺序.
对不起我的"英语"
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |