dojo 1.9编程风格

时间:2013-06-24 06:01:40

标签: dojo

我是一个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>

2 个答案:

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