我是一个dojo新手,当我使用dojo时,我对dojo require块感到困惑,在这里我给出三种方式来编写dojo,哪一个是最好的?
编程样式1,你可以在dojo教程中看到这个,但是我不喜欢这个样式,我喜欢把事件添加为html标签属性,比如<div onclick='test()'></div>
,在这个样式中,我无法访问函数test1()< / p>
<script>
require(["dojo/query", "dojo/dom","dojo/domReady!"], function(query, dom){
function test1(){}
function test2(){}
//...other functions
});
</script>
编程风格2,定义一次需要,然后在函数中使用
<script>
require(["dojo/dom"]);
function test1(){
var dom=require("dojo/dom");
//do something with dom
}
function test2(){
var dom=require("dojo/dom");
//do something with dom
}
</script>
编程样式3,函数内的require块
<script>
function mytest(){
require(["dojo/query", "dojo/dom"], function(dom){
//do something with dom
})
}
function mytest2(){
require(["dojo/query", "dojo/dom"], function(dom){
//do something with dom
})
}
</script>
答案 0 :(得分:0)
对于你想要做的事情,我会选择选项3. 3与2完全相同,只是它与AMD很好地配合。
我认为如果你在执行此操作时有异步模式:
var dom = require("dojo/dom");
dom在短时间内仍未定义,导致AMD加载程序与随后的代码之间的恶意竞争。 有可能你正在这样做:
require(["dojo/dom"]);
在你声明你的函数之前,你正在确保加载器找到dojo / dom尽可能快,并且它可能会在它之后的代码之前解析,但是你仍然在那里玩火。
答案 1 :(得分:0)
建议的方法是在javascript中而不是在dom中连接您的事件,例如:
require(["dojo/on", "dojo/query", "dojo/dom","dojo/domReady!"], function(on, query, dom){
function test1(){}
function test2(){}
on(someNode, on.selector(".myClass", "click"), test1);
});
请参阅http://dojotoolkit.org/reference-guide/1.9/dojo/on.html#selector
如果你真的想坚持声明的方式(自1.7以来不是首选的dojo方式),你可以通过将你的模块添加到你的html中来将你的模块放在全局空间中:
<script type="dojo/require">
dom : "dojo/dom",
query : "dojo/query"
</script>
请参阅http://dojotoolkit.org/reference-guide/1.9/dojo/parser.html#declarative-require
或者......您可以通过将示例1修改为此来将回调放在全局空间中:
<script>
require(["dojo/query", "dojo/dom","dojo/domReady!"], function(query, dom){
test1 = function(){};
test2 = function(){};
//...other functions
});
</script>