Drupalの動作のより良い理解


51

今日は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関数を定義できますか?

Lullabotからこのブログの記事JS行動周りの概念を説明するの偉大な仕事をしていません:lullabot.com/articles/...
スティーブPersch

回答:


56

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

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


2

簡単に言えば、Drupal.behaviors実装するより良い方法ですjQuery.ready

jQuery.readyDOMの準備ができたときに1回だけ実行されるのとは異なり、Drupal.behaviorsページ実行中に複数回実行できます。

たとえば、ビューの無限スクロールでは、ユーザーがクリックしてさらにボタンをロードすると、より多くの要素がロードされます。したがって、DOMは初期ロード後に変更されます。

新しく追加された要素にクラスを追加する場合はどうなりますか?ここでは、Drupalの動作が便利です。

ビヘイビアは、AJAXリクエストを含むすべてのリクエストで実行されます。

Drupalは、DOMがロードされたときと、Ajaxによって変更されたときに、添付された動作を呼び出し、2つの引数を渡します。

コンテキスト設定

Drupal.attachBehaviors()が初めて呼び出されると、コンテキスト変数にはDOMを表すドキュメントオブジェクトが含まれますが、残りの呼び出しでは、コンテキストは影響を受けるHTMLを保持します。

settingsには、PHPを介してJavaScriptに渡される情報が含まれています。これは、Drupal.settingsを介してJavaScriptにアクセスすることに似ています。

さらに、モジュールはDrupal.attachBehaviors()を呼び出すこともできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.