2013-06-24 77 views
0

我是道場新手,當我使用dojo時,我被dojo require塊弄糊塗了,這裏給出三種寫道場的方法,哪一個最好? 編程風格1,你可以在道場教程中看到這一點,但我不喜歡的風格,我喜歡添加事件爲HTML標記屬性一樣<div onclick='test()'></div>,在這種風格,我無法訪問功能測試1()dojo 1.9編程風格

<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,所需要的功能

<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

的建議的方法是連接在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的首選道場方式),你可以把你的模塊在全球空間加給你的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> 
0

內部塊對於你想要做的事情,我會選擇3。3與2幾乎是一樣的,只不過它與AMD搭配很好。

我認爲,如果你這樣做的時候上了異步模式:

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

DOM仍然是不確定的一段短暫的時期,導致AMD加載器和代碼之間的討厭的種族如下。 機會是因爲你這樣做:

require(["dojo/dom"]); 

了你宣佈你的功能你投保裝載機發現道場/ DOM快是可能的,有可能會跟隨它的代碼之前解決之前,但你仍然在那裏玩火。