まず、私は主に単一ページのアプリケーションを扱っています。
これは私が通常操作する方法です:
// Main module
;(function($, win, undefined) {
var module = {
_currentPanel,
initialize: function() {
// all my global bindings here
},
// Only included to understand whats going on in the sub-module below
displayPanel: function(panelName) {
if (!!module._currentPanel) {
$(module._currentPanel)
.hide(0)
.triggerHandler('hide.panel');
}
module._currentPanel = panelName;
$(panelName)
.show(0)
.triggerHandler('show.panel');
},
};
$.extend("namespace", module);
})(jQuery, window);
// Sub modules
;(function($, win, undefined) {
var module = {
something: function() {
// ..nothing to see here, this is just how i construct my modules
}
};
// Event bindings specific to this module
$('#geo-panel').bind('show.panel', function() {
// wire up init() stuff
});
$('#geo-panel').bind('hide.panel', function() {
// wire up dispose() stuff
});
$.extend("namespace", module);
})(jQuery, window);
それで、何が起こっているのですか?
私のメインモジュールはすべてのグローバルなものを保持しています..それは論理的でした:)ページをロードするときにどこかで呼び出すinitialize()関数を使用します。これにより、すべてのページ (この場合はビュー) で役立つすべての汎用バインディング/セレクターが接続されます。
次に、サブモジュールは、アプリケーションでさまざまな疑似ページを表示するときにトリガーするイベントへのバインディングを保持します。それらはすべて、サイト全体でロジックを分離できるようにするためにかなり使用する .triggerHandler() に反応します。
displayPanel("#ジオパネル");
displayPanel("#someother-panel");
次に、メイン モジュールとサブモジュールの両方が大きな js ファイルに集約されます。ここでいくつかの冗長な $.extend() が行われています (私はそれを使用してその場で名前空間を作成します)、すべてを特殊なサブモジュール (設定、プロファイル、検索など) に分割し、自動的にビルド/アプリケーションのビルドで集計。
ただし、単一ページのアプリケーションを使用していない場合は、次のいずれかを行います。
- すべての参照を
#panel-geo
, からより似たものに変更するだけです#pageX #panel-geo
- または、すべてのページに共通の js を 1 つ、各ページに特定の js を 1 つ使用します。