3 つのページ (単一ページのインターフェイス) を持つアプリケーションがあります。これらのページの機能は類似していますが、同一ではありません。
したがって、共通の機能を提供する javascript-modules が必要です。次に、各ページで共通機能の一部をカスタマイズ/上書きできます。
私は backbone.js を使用しているので、次のようにします。
- 共通のモデル、ビュー、コレクションなどを含むファイルをロードします。
- ステップ1の一部をカスタマイズ/上書きするアプリ固有のファイルをロードします
- 必要なすべてのモデル/ビュー/コレクションをインスタンス化する init() 関数を呼び出します
現時点では、モジュールを次のようなモジュール コンテナーに格納しています。https://stackoverflow.com/a/9426071 各モジュールには、メインの init() 関数によって実行されるオプションの init() 関数があります。
例:
results.js というファイルがあります。検索結果の共通のモデル/コレクション/ビューを定義します。その init() 関数ではすべてがインスタンス化されますが、この関数はまだ呼び出されていません:
var resultView = new ResultView()
次に、myApp.js をインクルードすると、View の一部が上書きされます。
- メインの init() 関数は、新しいビューをインスタンス化する results.js init() を呼び出します。すべてがうまく機能し、スムーズでドライです。
今度は、独自のモジュール コンテナーではなく、require.js に切り替えて、コードを整理する方法を知りたいと考えています。
各モジュールの init() 関数の代わりに、myApp.js ですべてのモデル/ビューなどをインスタンス化することもできます。これは、多くの反復コードがあることを意味します。
または、init() 関数を持つ各モジュールに固執し、myApp.js でそれらの init() 関数を呼び出すこともできます。3 つのページごとにモジュールを 3 回明示的に書き留める必要があるため、これは好きではありません。
require(['module1', 'module2', 'module3', ...],
function(module1, module2, module3, ...) {
var init = function() {
module1.init();
module2.init();
module3.init();
...
}
return {init: init};
}
);
10 個のモジュールと多数のライブラリの場合、これは適切ではなく、DRY です。require.js が保持するすべてのモジュールにアクセス (ループオーバー) する方法はありますか?
または、何か不足していますか? コードを別の方法で構成する必要がありますか?
ヒント/考えは大歓迎です。
マイケル