Backbone、RequireJS、Handlebarsを使用して重要なWebアプリケーションを構築していますが、興味があります。現時点では、各モデルは次のようになっています。
define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
return Backbone.Router.extend({
// stuff here
});
});
ここで、thing / a、thing / bはどちらも、たとえばハンドルバーテンプレートなどに独自の依存関係を持っています。今、私のmain.jsでは、すべての「トップレベル」ルーターが読み込まれ、初期化されます。各トップレベルルーターには一連の依存関係(モデル、ビューなど)があり、それぞれに独自の依存関係(テンプレート、ヘルパー、ユーティリティなど)があります。基本的に、大きな木の構造。
この場合の問題は、このツリー全体が解決され、ページの読み込み時に読み込まれることです。最終的にオプティマイザーを実行し、1つの大きな単一ファイルになってしまうので(RequireJSを基本的にモジュール化フレームワークに減らします)、それは気になりません。ただし、ビューやテンプレートなどを「オンデマンド」でロードできるかどうかは気になります。
ここで説明されている「簡略化されたCommonJSラッピング」があるので、それを試しました。
define(function(require) {
Backbone = require('Backbone');
return Backbone.Router.extend({
doStuff: function() {
var MyView = require('js/myView');
new MyView().render();
}
});
});
ただし、Chromeのネットワークインスペクターを見ると、RequireJSは、doStuffハンドラーをトリガーするルートをトリガーしなくても、どういうわけか、myView
依存関係をロードしているようです。質問:
- これは実際に可能ですか?RequireJSに、実際にルート
require()
をトリガーせずにへの呼び出しを探す黒い魔術師はいますか?doStuff
- これは、RequireJSモジュールとリソースの「オンデマンド」で遅延読み込みを行うための理論的に正しい方法ですか?
- この表記を使用した場合でも、r.jsオプティマイザーはアドバタイズされたとおりに機能しますか?