Drupal의 첨부 동작 : 새로로드 된 모든 컨텐츠에 반응합니까?


12

여러 가지 방법으로 함께 작동하는 두 가지 모듈이 있습니다. 그들이 함께 작동하는 것 중 하나는 모듈 A가 AJAX를 통해 컨텐츠를로드하고 모듈 B가로드 된 컨텐츠에 이벤트 리스너를 연결해야한다는 것입니다.

그러나 내용이 모듈 A로 AJAX를 통해로드 될 때 만 '연결'기능 것으로 보인다 Drupal.behaviours.a가 의 '연결'기능 호출, 그리고 도착 Drupal.behaviours.b을 . 두 함수 모두 페이지로드에서 호출되지만 후속 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();아약스 성공 콜백에 추가 해 보셨습니까 ?
Clive

아니요, 그러나 자동으로 처리해서는 안됩니까? 나는 그것이 '첨부'기능의 전체 아이디어라고 생각했다. 페이지로드 및 페이지 업데이트시 호출되어야합니까? 그러나 호출 모듈에 대한 '첨부'기능 만 페이지 업데이트에서 호출되는 것 같습니다.
sbrattla

그것은 내 이해였습니다. 그래도 너무 깊이 들여다 보지 않았습니다. AJAX 호출 후 동작을 다시 연결해야 할 때가 있다는 것을 알고 있습니다. 그래서 방금 필요하다고 생각했습니다
Clive

drupal.js 살펴보기 : "Drupal.attachBehaviors가 jQuery 준비 이벤트에 아래에 추가되어 초기 페이지로드시 실행됩니다. 솔루션에 AHAH / Ajax를 구현하는 개발자는 새 페이지 컨텐츠가로드 된 후이 함수를 호출해야합니다. 모든 행동을 새 콘텐츠에 첨부하기 위해 처리 할 요소입니다. " attachBehaviours를 직접 호출 해야하는 것 같습니다. 그러나; AJAX 성공 콜백에서 attachBehaviours를 호출하지 않더라도 모듈 A의 '첨부'기능이 실행된다는 것이 퍼즐입니다. 왜 모든 모듈이 아닌 호출 모듈에만 해당됩니까?
sbrattla

1
포괄 솔루션을 원한다면 $('body').ajaxSuccess(Drupal.attachBehaviors);아마 작동 할 것입니다
Clive

답변:


4

의 의견에서 misc/drupal.js작동 방식을 설명합니다.

  • Drupal.attachBehaviors가 jQuery 준비 이벤트에 추가되었습니다.
  • 초기 페이지로드시 실행됩니다. AHAH / Ajax를 구현하는 개발자
  • 새 페이지 컨텐츠가 작성된 후 솔루션은이 함수를 호출해야합니다.
  • 모든 요소를 ​​부착하기 위해 처리 할 요소를 공급
  • 새로운 내용에 대한 행동.

2

Drupal.behavior.b에 이것을 추가하십시오 :

Drupal.attachBehaviors($(this));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.