私のプロジェクトには次のファイルが含まれています。
./index.html
./js/main.js
./js/vendor/require.js
./js/viewmodel/vm.js
にindex.html
は、次の関連するスニペットがあります。
<script data-main="js/main.js" src="js/vendor/require.js"></script>
<script type="text/javascript">
require(['viewmodel/vm', 'ko'],
function(viewmodel, ko) {
ko.applyBindings(viewmodel);
}
);
</script>
ファイルは次のjs/main.js
とおりです。
var root = this;
define('jquery', ['http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js'], function () { return root.$; });
define('ko', ['http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.1.0.js'], function (ko) { return ko; });
ファイルjs/viewmodel/vm.js
...
define(['jquery', 'ko'],
function($, ko) {
return {
subject: 'world',
greeting: 'hello'
}
}
);
ブラウザを開いてindex.htmlを開くと、ブラウザはjs/ko.js
で定義されたモジュールを使用する代わりに、と呼ばれるファイルを読み込もうとしますmain.js
。data-main属性が指すjsファイルは、依存関係が解決される前に実行されることが保証されていないようです。data-main jsファイルの目的の1つは、require構成(つまり、パス、shimなど)を定義することであるため、これは私には正しくないようです。requirev2.1.2を使用しています。
main.js
ファイルの内容をのスクリプトブロックにコピーすると、これは完全に正常に機能しますindex.html
。「完全に問題ない」とは、koをモジュールとして解決し、ダウンロードを試みる代わりに、koを解決するための適切なCDNリンクを見つけることを意味します./js/ko.js
。