require() API(AMDローダー)
AMDモジュールのロードを開始するには、AMDローダーのAPIであるrequire()関数を使います。require()関数は次の形をとります:
require(modules, callback);
- modules(文字列の配列, 必須): ロードするモジュールのID。
- callback(関数, 任意): モジュールが読み終わったときに呼ばれる関数。その引数は読み込まれたモジュールとなる。
require()関数を使うと、先ほどの価格引き合わせモジュール(my/price)は次の形でロードすることができます。このときmy/pricelistモジュールとmy/discountモジュールはrequire()関数の内部コードがmy/priceに定義された依存モジュールのリストをみることにより、自動的に読み込まれます:
require(["my/price"], function(price){ // オレンジの本日価格をアラートボックスに出力 alert(price("orange")); });
なお、require()関数は同期的にモジュールを返す別な形も存在し、これはDojo 1.7でもサポートされています。すでに読み込まれていることが確実なモジュールを参照するのに便利で、次のように使うことができます:
require("my/price")("orange");
ちなみに、my/pricelist.js、my/discount.js、my/price.jsのmyディレクトリをdojo/dijit/dojoxと同じ位置においた場合、上のrequire()関数を使ったサンプル(my/pricetest.htmlとします)は次のように書けます:
<!DOCTYPE html> <html> <head> <title>Price List Test</title> <script type="text/javascript"> dojoConfig = { async: true, packages: [ { name: "my", location: "../my" } ] }; </script> <script type="text/javascript" src="../dojo/dojo.js"></script> <script type="text/javascript"> require(["my/price"], function(price){ // オレンジの本日価格をアラートボックスに出力 alert(price("orange")); }); </script> </head> <body></body> </html>
Dojo 1.7以外のAMDローダーを使う場合はdojoConfig = { … }の部分をrequire = { … }に置き換える必要があります(Dojo 1.7はどちらの形もサポートしています)。dojoConfigについては後ほど詳しく説明します。