Drupalビヘイビアについて今日読んだので、次のコードを書いてみました。
_(function ($) {
Drupal.behaviors.mymodule = {
attach: function (context, settings) {
$('#mymodule_id', context).change(function () {
alert('Handler for .change() called.');
});
}
};
}(jQuery));
_
Drupal.behaviors.mymodule
_は名前空間ですか?document.ready()
と同等ですか?要するに、document.ready()
に対するBehaviorsの利点は、AJAXを介してロードされたコンテンツに自動的に再適用されることです。 mymodule
は名前空間であり、一意である必要があります。 context
は、これが適用されるページの一部です。たとえば、AJAXで更新されたフォームの一部です。複数のビヘイビアーをアタッチできますが、それぞれに一意の名前(mymodule)を使用する必要があると思います。
詳細については、次のリソースをご覧ください。
簡単に言えば、Drupal.behaviors
はjQuery.ready
を実装するためのより良い方法です
DOMの準備ができたときに一度だけ実行されるjQuery.ready
とは異なり、Drupal.behaviors
はページ実行中に複数回実行できます。
たとえば、ビューが無限スクロールの場合、ユーザーが[もっと読み込む]ボタンをクリックすると、より多くの要素が読み込まれるため、最初の読み込み後にDOMが変化します。
新しく追加された要素にクラスを追加したい場合はどうなりますか?ここでDrupal動作が便利になります。
動作は、AJAXリクエストを含む)リクエストごとに実行されます。
Drupalは、DOMが読み込まれたとき、およびAjaxによって変更されたときに、2つの引数を渡して、添付された動作を呼び出します
コンテキストおよび設定
Drupal.attachBehaviors()が初めて呼び出されたとき、context変数にはDOMを表すドキュメントオブジェクトが含まれていますが、残りの呼び出しでは、影響を受けるHTMLの一部がコンテキストに保持されます。
settingsには、PHPを介してJavaScriptに渡される情報が含まれます。これは、Drupal.settingsを介してアクセスするのに似ています。
さらに、モジュールはDrupal.attachBehaviors()も呼び出すことができます。