답변:
Drupal 7에서 사용하는 JavaScript 코드는 다음과 같습니다.
Drupal.attachBehaviors = function (context, settings) {
context = context || document;
settings = settings || Drupal.settings;
// Execute all of them.
$.each(Drupal.behaviors, function () {
if ($.isFunction(this.attach)) {
this.attach(context, settings);
}
});
};
Drupal 6은 비슷한 코드를 사용합니다.
Drupal.attachBehaviors = function(context) {
context = context || document;
if (Drupal.jsEnabled) {
// Execute all of them.
jQuery.each(Drupal.behaviors, function() {
this(context);
});
}
};
JavaScript가 객체 / 배열 속성이 항상 추가 된 순서와 동일한 순서로 순회하도록 보장하는 경우 값은 jQuery.each()
첫 번째 매개 변수로 전달 된 배열에 삽입 된 순서와 동일한 순서로 두 번째 매개 변수로 사용 된 함수로 전달됩니다.
이는 삽입 된 첫 번째 동작이 먼저 Drupal.behaviors
실행 됨을 의미합니다 .
이 경우 모듈에서 정의한 동작을 먼저 실행하려면 더 가벼운 가중치를 사용할 수 있습니다. 다른 것들보다 먼저 실행하려면 모듈 무게를 -50으로 설정해야합니다. 다른 값들도 작동 할 수 있습니다. Drupal 7을 사용하는 경우 drupal_add_js ()가중치를 JavaScript 코드에 연결할 수 있습니다. 더 가벼운 가중치를 가진 JavaScript 코드가 HTML 출력에서 먼저 나타납니다. Drupal 6에서는 불가능합니다.
JavaScript는 속성이 추가 된 순서대로 순회한다고 보장하지 않습니다. 이것은 다른 JavaScript 구현은 다른 순서를 사용하여 동일한 속성을 제공한다는 것을 의미합니다. 또한 동일한 브라우저의 다른 버전에서 동일한 순서가 변경 될 수 있음을 의미합니다.
select name, weight from system where type = 'module' order by weight ASC, name
Drupal.behaviors
. 내가보고 $.each(Drupal.behaviors)
했듯이 식별자를 기준으로하지 않고 삽입 된 것과 동일한 순서로 객체를 나열합니다.
행동 가중치 모듈을 사용하십시오 .
(제작 현장에서 사용하기 전에 테스트를 해주십시오)
이 모듈은 가중치를 비헤이비어에 첨부 한 다음 가중치를 고려한 drupal.attachBehaviors
사용자 지정 구현으로 하이재킹 / 대체합니다 .
다른 답변에서 제안한 것처럼 모듈 무게 대신에 왜 그렇지 않습니까?
참조는
그들을 통해 반복 자바 스크립트 객체 predicatble 필드의 순서인가? 그리고
javascript에서 요소 순서-for (… in…) 루프 .
드루팔 6
이식성이 필요하지 않은 간단한 해결책은 마지막으로 실행하려는 JS를 테마 template.php 파일에 넣는 것입니다. drupal_add_js 테마는 항상 모듈 다음에 호출됩니다.
이식성이 뛰어나야하는 경우 drupal 6의 "가장 깨끗한"솔루션은 PHP를 사용하는 모듈과 무게가 다른 새 모듈을 추가하는 것입니다. 동일한 폴더에 두 개의 모듈이 있고 첫 번째 모듈이 첫 번째 모듈에 종속되도록하고 설치 / 업데이트 후크에서 가중치를 조정할 수도 있습니다. 어느 것도 필요하지 않으므로 설치가 더 쉬워집니다.