私が取り組んでいるページのページネーション コントロールは、複数のページがある場合に条件付きでバインドされていました。私のプロジェクトで次のコードを見るのは好きではありません。
if (pages > 1) {
$('.some_class').bind('event', function() {});
}
まとまりのないコーディングスタイルを表していると感じるからです。return
コントロールを使うよりも、あちこちにステートメントを散りばめているのと同じレベルに置くでしょう。イベントをグローバルに利用可能なオブジェクトにバインドすることは、関数呼び出しのローカル スコープには適していないように感じます。したがって、私は通常、2 つの JavaScript ファイルを作成します。たとえばpagination.js
、 とpagination-controls.js
. 私はhtmlを構築し、ページネーションコントロールを表示することについてのロジックを持っています。もう一方には、次のようなステートメントがあります。
$(document).on('click', '.pagination .next', function() {});
$('.pagination .next')
ページのどこかに要素があるかどうかに関係なく発生します。Web サイトにはビヘイビアーがあり、id とクラスしか認識しておらず、どこかのローカル スコープのインスタンス変数については認識していないという感じが気に入っています。
編集:以下で説明するように、これは間違いなく悪い習慣です。でも:
jQuery 1.7 の時点で、.on() メソッドは、イベント ハンドラーをドキュメントにアタッチするための推奨メソッドです。
直接および委任されたイベントに関する議論は適切です。特に、以下が私の使用法を説明していると思います:
委任されたイベント ハンドラーがアタッチされたときに存在することが保証されている要素を選択することで、委任されたイベントを使用して、イベント ハンドラーを頻繁にアタッチおよび削除する必要がなくなります。この要素は、Model-View-Controller デザインのビューのコンテナー要素、またはイベント ハンドラーがドキュメント内のすべてのバブリング イベントを監視する必要がある場合はドキュメントのコンテナー要素である可能性があります。
編集:だから私は今、「ロジックに基づくバインディングよりも無条件に親要素へのバインディング動作を好むのは悪いことなのか?」と思っていると思います。それはおそらくスタイルの問題であり、私の元の質問には回答があったので、回答を受け入れると思います.