2012-03-04 2 views
2

私のテンプレートにデモ用dijitウィジェットを含めることを試みています。しかし、私は「Dojoは定義されていません。私は答えを見つけようとしましたが、できませんでした。このエラーは、必要なdojo.jsが実際にブラウザによってロードされるため、奇妙です。動作していない何Dijitを使用しようとしていますが、取得中です:Dojoが定義されていません

は次のとおりです。

dojo.require("dijit.form.MultiSelect"); 

しかし、私がやって他の道場・モジュールを使用する場合:それは作品

require(["dojo/store/JsonRest" ... 

を。

私はここに私のテンプレートのペーストビンを作った:http://pastebin.com/9fm13pSP

答えて

4

はこの道場1.7ですか?

このバージョンでは、Dojoは、グローバル・ネームスペースに関数define()require()を定義すると考えています。

これらの関数は、dojo自体を要求するために使用されます。 dojo.jsにはすべてのライブラリが含まれていますが、明示的にrequireまで使用することはできません。 (あなたが行ったように)真フラグセット、それは以下となります。ポール・グライムはあなたが非同期で道場1.7が含まれている場合、指摘されたように

<script> 
// Dojo 1.7 (AMD) 
require(["dojo"], function(dojo){ 

dojo.require("dijit.form.MultiSelect"); 
dojo.ready(function(){ 
     var sel = dojo.byId('dynamic'); 
     var n = 0; 
     for(var i in dijit){ 
       var c = dojo.doc.createElement('option'); 
       c.innerHTML = i; 
       c.value = n++; 
       sel.appendChild(c); 
     } 
     new dijit.form.MultiSelect({ name: 'dynamic' }, sel); 
}); 

}); 
</script> 
3

を:

これは、(道場1.7.2を使用して)私のために働きましたrequiredefine関数をグローバル名前空間にのみ公開します。これは、最近導入されたAMDモジュールの新しいスタイルへの移行の一環です。フラグと1.6

で逆の互換性に依存している:あなたは今のいずれかを選択でき

  1. が少し

  2. は「真の非同期」を削除し、コードの周りにラッパー「道場を必要とする」ことを追加

  3. "dojo.require"で古い同期スタイルの代わりに新しい1.7 AMD非同期モジュールを使用するようにコードを変換します。

関連する問題