web-dev-qa-db-ja.com

Drupal動作のより良い理解

Drupalビヘイビアについて今日読んだので、次のコードを書いてみました。

_(function ($) {

  Drupal.behaviors.mymodule = {
    attach: function (context, settings) {
      $('#mymodule_id', context).change(function () {
        alert('Handler for .change() called.');
      });
    }
  };

}(jQuery));
_
  • _Drupal.behaviors.mymodule_は名前空間ですか?
  • Drupal動作に渡されるコンテキストおよび設定パラメーターは何ですか?
  • これはdocument.ready()と同等ですか?
  • 複数の関数をアタッチできますか?
  • どこかで呼び出されるJavaScript関数を定義できますか?
53
Hacker

要するに、document.ready()に対するBehaviorsの利点は、AJAXを介してロードされたコンテンツに自動的に再適用されることです。 mymoduleは名前空間であり、一意である必要があります。 contextは、これが適用されるページの一部です。たとえば、AJAXで更新されたフォームの一部です。複数のビヘイビアーをアタッチできますが、それぞれに一意の名前(mymodule)を使用する必要があると思います。

詳細については、次のリソースをご覧ください。

57
Berdir

簡単に言えば、Drupal.behaviorsjQuery.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()も呼び出すことができます。

2
vivek agarwal