1

私は自分のアプリでRequireJSを使用していますが、その動作のすべての側面を十分に理解していません。

main.js依存関係が記述されているファイルがあります。コンポーネントが稼働していて、さまざまなクラス(メインビューの作成を担当するクラス)Backbone.Routerがトリガーされます。あなたがここでapplication見ることができるいくつかのコード。

requireJSで確認できること:一部のビューがまだ'required'(require('./ subviews / view)を明示的に呼び出すことを意味します)であっても、ロードされ、その中にすべてのテンプレートがロードされます(requireJSテキストプラグインを使用します) 。新しいアプリケーションを追加しているが、サブビューの準備ができていないが、アプリケーションを使用したことがない場合-存在しないサブビューはまだロードされており、404エラーが発生します。

私がすべてを明確に説明したかどうかはわかりませんが、あなたがポイントを得たことを願っています。

4

2 に答える 2

3

CommonJSの糖化された形式のdefine()を使用しているようです。これはNode/CommonJSコードをラップするための単なる便利なものですが、AMDモジュールはNodeモジュールのようには動作しないことに注意してください。

AMDローダーは、モジュールのファクトリ関数でrequire('')呼び出しをスキャンし、すべてのモジュールをロードするようにします。require('./apps/DashboardApp');そうしないと、ファイルIOがデフォルトで非同期ネットワークIOであるため、を実行することによるそのモジュールへの同期アクセスはブラウザで失敗します。

一部のスクリプトのロードを遅らせたい場合は、requireのコールバック形式を使用する必要があります。

require(['./apps/DashboardApp'], function (DashboardApp) {
});

ただし、この呼び出しは非同期呼び出しであるため、それに応じてモジュールのパブリックAPIを調整する必要があります。

したがって、基本的に、依存関係のオンデマンドロードを実行する場合は、ブラウザーのファイルIOの非同期性を考慮して、requireのコールバック形式が必要です。

于 2012-08-26T22:28:51.727 に答える
1

RequireJSは必要なすべての依存関係をロードするためです。コードをざっと見てみると、ルーティングモジュールをロードしていて、ルーティングには次のものがあることがわかります。

var ViewManager = require('ViewManager');

つまり、ViewManager、ViewManagerによって指定された依存関係、およびそれらのモジュールが必要とするその他の依存関係が読み込まれます。基本的にrequire(...)を含める場合、依存関係を指定するのと同じです。これはRequireJSによって次のように変換されます

define(['ViewManager'], ...)

于 2012-08-26T16:59:25.660 に答える