Drupalのアタッチ動作:新しくロードされたすべてのコンテンツに反応しますか?


12

多くの点で連携する2つの異なるモジュールがあります。それらが一緒に動作することの1つは、モジュールAがAJAXを介してコンテンツをロードし、モジュールBがロードされたコンテンツにイベントリスナーをアタッチする必要があることです。

ただし、モジュールAによってAJAXを介してコンテンツが読み込まれると、Drupal.behaviours.aの「attach」関数のみが呼び出され、Drupal.behaviours.bの「attach」関数は呼び出されないようです。両方の関数はページの読み込み時に呼び出されますが、その後のAJAXコンテンツの読み込みでは呼び出されません。

// This runs every time module A loads new content.
Drupal.behaviors.a = {
  attach: function(context, settings) {
    alert('a:attach');
  }
}

// This only runs on page load, but never when module A loads new content.
Drupal.behaviors.b = {
  attach: function(context, settings) {
    alert('b:attach');
  }
}    

モジュールが新しいコンテンツをロードするたびに、Drupal.behaviours.bの「アタッチ」機能を実行するにはどうすればよいですか?


Drupal.attachBehaviors();ajax成功コールバックに追加してみましたか?
クライブ

いいえ、しかしそれは自動的に処理されるべきではありませんか?これが「アタッチ」機能の全体的なアイデアだと思いました。ページの読み込みおよびページの更新時に呼び出す必要があることを?ただし、ページの更新時に呼び出されるモジュールの「アタッチ」関数のみが呼び出されるようです。
sbrattla

それは私の理解でした、はい、私はこれまで深く調べたことがありませんでした。私は、AJAXは、私はちょうどそれが必要だったと仮定して、私は再接続行動に必要なまし呼び出した後の時間があったことを知っている
クライヴ

drupal.jsを見る:「Drupal.attachBehaviorsはjQuery readyイベントの下に追加されるため、最初のページ読み込みで実行されます。ソリューションでAHAH / Ajaxを実装する開発者は、新しいページコンテンツが読み込まれた後、すべての動作を新しいコンテンツにアタッチするために処理される要素。」attachBehavioursを自分で呼び出す必要があるようです。だが; AJAX成功コールバックでattachBehavioursを呼び出していないにもかかわらず、モジュールAの「attach」関数が実行されるのは困惑します...?なぜすべてのモジュールではなく、呼び出しモジュールだけのために?
sbrattla

1
キャッチオールソリューション$('body').ajaxSuccess(Drupal.attachBehaviors);が必要な場合は、おそらく動作します
クライブ

回答:


4

これは、のコメントから、misc/drupal.jsどのように機能するかを説明しています。

  • Drupal.attachBehaviorsはjQuery readyイベントに追加されます。
  • 最初のページの読み込み時に実行されます。AHAH / Ajaxを実装する開発者
  • ソリューションは、新しいページコンテンツが
  • 読み込まれ、すべてを添付するために、処理される要素をフィードする
  • 新しいコンテンツへの行動。

2

これをDrupal.behavior.bに追加してみてください:

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