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については後ほど詳しく説明します。
