0

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

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

编程风格2,定义一次require,然后在funciton中使用

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

2 回答 2

0

对于您要执行的操作,我会选择选项 3。3 与 2 几乎相同,只是它与 AMD 配合得很好。

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

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

dom 仍然会在短时间内未定义,从而导致 AMD 加载程序和随后的代码之间发生令人讨厌的竞争。你这样做的机会是:

require(["dojo/dom"]);

在你声明你的函数之前,你要确保加载器尽可能快地找到 dojo/dom,并且它可能会在它后面的代码之前解决,但你仍然在那里玩火。

于 2013-06-24T06:33:28.690 回答
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>
于 2013-06-24T16:59:08.413 回答