dojo 1.9编程风格

dojo 1.9编程风格,dojo,Dojo,我是一个dojo新手,当我使用dojo时,我被dojo require块弄糊涂了,这里我给出了三种编写dojo的方法,哪一种是最好的? 编程风格1,您可以在dojo教程中看到,但我不喜欢这种风格,我喜欢将事件添加为html标记属性,如,在这种风格中,我无法访问函数test1() require([“dojo/query”,“dojo/dom”,“dojo/domReady!”),函数(query,dom){ 函数test1(){} 函数test2(){} //……其他职能 }); 编程风格2

我是一个dojo新手,当我使用dojo时,我被dojo require块弄糊涂了,这里我给出了三种编写dojo的方法,哪一种是最好的? 编程风格1,您可以在dojo教程中看到,但我不喜欢这种风格,我喜欢将事件添加为html标记属性,如
,在这种风格中,我无法访问函数test1()


require([“dojo/query”,“dojo/dom”,“dojo/domReady!”),函数(query,dom){
函数test1(){}
函数test2(){}
//……其他职能
});
编程风格2,定义require一次,然后在function中使用它

<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>  

需要([“dojo/dom”]);
函数test1(){
var dom=require(“dojo/dom”);
//用dom做点什么
}
函数test2(){
var dom=require(“dojo/dom”);
//用dom做点什么
}
编程风格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>

函数mytest(){
require([“dojo/query”,“dojo/dom”],函数(dom){
//用dom做点什么
})
}
函数mytest2(){
require([“dojo/query”,“dojo/dom”],函数(dom){
//用dom做点什么
})
}

对于您想要做的事情,我选择选项3。3和2几乎是一样的东西,只是它与AMD配合得很好

我认为,如果在执行此操作时启用了异步模式:

var dom = require("dojo/dom");
require(["dojo/dom"]);
dom在很短的一段时间内仍然是未定义的,这将导致AMD加载程序和后续代码之间的激烈竞争。 当您这样做时,机会是:

var dom = require("dojo/dom");
require(["dojo/dom"]);

在您声明函数之前,您要确保加载程序尽快找到dojo/dom,并且很可能在随后的代码找到dojo/dom之前解决,但您仍然在玩火。

建议的方法是在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);
});

如果您真的想坚持声明式方式(这不是自1.7以来首选的dojo方式),可以通过将以下内容添加到html中,将模块放入全局空间:

<script type="dojo/require">
    dom : "dojo/dom",
    query : "dojo/query"
</script>

dom:“dojo/dom”,
查询:“dojo/query”

或者。。。通过将示例1修改为以下内容,可以将回调放在全局空间中:

<script>
require(["dojo/query", "dojo/dom","dojo/domReady!"], function(query, dom){
   test1 = function(){};
   test2 = function(){};

   //...other functions
    });
 </script>

require([“dojo/query”,“dojo/dom”,“dojo/domReady!”),函数(query,dom){
test1=函数(){};
test2=函数(){};
//……其他职能
});