RequireJSを使い始めたばかりですが、依存関係を正しく表現していないようです。私はかなり単純な依存関係チェーンをマッピングしようとしています:
KnockoutJS
に依存するにjquery-tmpl
依存するjquery
使用しないようにしていますrequire-jquery
。私のHTMLでは、これを行います。
<script data-main="scripts/main" src="scripts/require.js"></script>
私のmain.js
:
require(
{
baseUrl: 'scripts',
paths: {
jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min',
jquerytmpl: "require-jquery-tmpl",
knockout: "require-knockout"
}
},
["myApp"],
function() {
$(function() {
console.log('main: triggered');
});
}
);
私のrequire-jquery-tmpl.js
:
define([
"order!jquery",
"order!http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js"],
function() {
console.log("init tmpl");
}
);
私のrequire-knockout.js
:
define([
"order!jquerytmpl",
"order!./scripts/knockout-1.2.1.js"],
function() {
console.log("init ko");
}
);
そして最後にmyApp.js
:
define(["knockout"], function() {
$(function() { ... }
}
私が見ているのは、knockout-1.2.1.jsがjquery-tmpl.jsの前にロードおよび評価されていることです。console.log
sは、の前に発生することを示しているためinit tmpl
、init ko
RequireJSコールバックは正しい順序で発生しています。しかし、Knockoutにいくつかのデバッグログを追加したところ、それが発生する前に評価されていることがわかりましたinit tmpl
。
その結果、しようとするとko.applyBindings()
、jQueryテンプレートが見つからないと文句を言います。面白いことに、コールバックにデフォルトのテンプレートエンジンを登録するように手動でKOに指示すると、正常に動作し、すべてが完璧になります。しかし、それは核心的な問題を覆い隠しているだけだと思います。
Knockoutを評価する前にjquery-tmplがロードされるまでRequireJSが待機しないのはなぜですか?