0

私は道場初心者ですが、道場を使用するとき、道場のrequireブロックに戸惑います。ここでは、道場を書くための3つの方法を挙げます。どれが最適ですか? プログラミング スタイル 1、道場のチュートリアルでこれを見ることができますが、私はスタイルが好きではありません。イベントを 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 を一度定義してから、関数内で使用する

<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

推奨される方法は、次のように、DOM ではなく JavaScript でイベントを接続することです。

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 に答える
0

あなたがしようとしていることについては、オプション 3 を使用します。3 は 2 とほとんど同じですが、AMD とうまく連携する点が異なります。

これを行うときに非同期モードをオンにしていると、次のようになります。

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

dom は、しばらくの間未定義のままであり、AMD ローダーとそれに続くコードの間で厄介な競合が発生します。チャンスはあなたがこれをしているときです:

require(["dojo/dom"]);

関数を宣言する前に、ローダーが dojo/dom を可能な限り高速に検出し、それに続くコードが解決する前に解決する可能性が高いことを保証しますが、それでもそこで火遊びをしています。

于 2013-06-24T06:33:28.690 に答える