多くの点で連携する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の「アタッチ」機能を実行するにはどうすればよいですか?
いいえ、しかしそれは自動的に処理されるべきではありませんか?これが「アタッチ」機能の全体的なアイデアだと思いました。ページの読み込みおよびページの更新時に呼び出す必要があることを?ただし、ページの更新時に呼び出されるモジュールの「アタッチ」関数のみが呼び出されるようです。
—
sbrattla
それは私の理解でした、はい、私はこれまで深く調べたことがありませんでした。私は、AJAXは、私はちょうどそれが必要だったと仮定して、私は再接続行動に必要なまし呼び出した後の時間があったことを知っている
—
クライヴ
drupal.jsを見る:「Drupal.attachBehaviorsはjQuery readyイベントの下に追加されるため、最初のページ読み込みで実行されます。ソリューションでAHAH / Ajaxを実装する開発者は、新しいページコンテンツが読み込まれた後、すべての動作を新しいコンテンツにアタッチするために処理される要素。」attachBehavioursを自分で呼び出す必要があるようです。だが; AJAX成功コールバックでattachBehavioursを呼び出していないにもかかわらず、モジュールAの「attach」関数が実行されるのは困惑します...?なぜすべてのモジュールではなく、呼び出しモジュールだけのために?
—
sbrattla
キャッチオールソリューション
—
クライブ
$('body').ajaxSuccess(Drupal.attachBehaviors);
が必要な場合は、おそらく動作します
Drupal.attachBehaviors();
ajax成功コールバックに追加してみましたか?