2013-05-17 4 views
1

Я смотрю на JavaScript фрагмент кода написан другим человеком, который говорит,В Dojo, для чего требуется() модуль, который уже определен()?

define(
    [ 
     "dojo/a", 
     "dojo/b", 
     "dojo/c", 
     ..., 
     "dojo/z" 
    ], 
    function(a, b) { 
     var c = require("dojo/c"); 
     ...; 
     var z = require("dojo/z"); 

     // code goes here 
    } 
); 

Я пытаюсь понять, почему вы могли бы сделать это. Разве это не намного короче сниппет точно такой же ?:

define(
    [ 
     "dojo/a", 
     "dojo/b", 
     "dojo/c", 
     ..., 
     "dojo/z" 
    ], 
    function(a, b, c, ..., z) { 
     // code goes here 
    } 
); 
+0

Я склонен согласиться; код для меня не имеет смысла. – McDowell

ответ

0

Вам не нужно, чтобы добавить снова требуют после импорта модулей сразу:

<script>require(['dojox/rpc/JsonRPC','dojo/store/Memory','dijit/form/FilteringSelect'], 
     function(FilteringSelect,JsonRPC,Memory){ 

     ##your code goes here.. 

     }); 
</script> 
0

Фрагменты не то же самое в вашем первом snippet загрузчик сначала загрузит все модули, переданные в массиве, в require и после выполнения обратного вызова только тогда, когда загружаются все модули, перечисленные в массиве. В обратном вызове вы можете запустить другой код перед остальными require.

Пример:

define(
    [ 
     "dojo/a", 
     "dojo/b", 
     "dojo/c", 
     ..., 
     "dojo/z" 
    ], 
    function(a, b) { 
     // execute some code here 
     var c = require("dojo/c"); 
     var z = require("dojo/z"); 
     // code execute here even if c and z are not loaded yet 
    } 
); 

Ваш второй фрагмент кода обратного вызова выполняется только тогда, когда все модули загружаются.

Как правило, я бы выбрал второй подход, даже если первый подход может быть удобным, если вам нужно загрузить некоторый модуль на основе некоторых условий.