Câu trả lời:
Mã JavaScript được sử dụng bởi Drupal 7 như sau:
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 sử dụng mã tương tự:
Drupal.attachBehaviors = function(context) {
context = context || document;
if (Drupal.jsEnabled) {
// Execute all of them.
jQuery.each(Drupal.behaviors, function() {
this(context);
});
}
};
Nếu JavaScript sẽ đảm bảo rằng các thuộc tính đối tượng / mảng luôn được dịch chuyển theo cùng thứ tự mà chúng được thêm vào, thì các giá trị sẽ được truyền từ jQuery.each()
hàm được sử dụng làm tham số thứ hai theo thứ tự chúng được chèn trong mảng được truyền dưới dạng tham số đầu tiên.
Điều này có nghĩa là hành vi đầu tiên được chèn vào Drupal.behaviors
được thực thi trước.
Trong trường hợp này, để cho phép các hành vi được xác định bởi mô-đun của bạn được thực thi trước tiên, bạn có thể sử dụng trọng lượng nhẹ hơn cho nó. Nếu bạn muốn chúng được thực thi trước các cái khác, trọng lượng mô-đun nên được đặt thành -50; các giá trị khác cũng có thể hoạt động. Nếu bạn đang sử dụng Drupal 7, drupal_add_js ()cho phép liên kết trọng số với mã JavaScript; Mã JavaScript với trọng lượng nhẹ hơn xuất hiện đầu tiên trong đầu ra HTML. Điều này là không thể với Drupal 6, nghĩ.
JavaScript không đảm bảo rằng các thuộc tính được duyệt theo cùng thứ tự chúng được thêm vào. Điều này có nghĩa là các triển khai JavaScript khác nhau sẽ trình bày các thuộc tính giống nhau bằng cách sử dụng một thứ tự khác nhau; điều đó cũng có nghĩa là cùng một thứ tự có thể thay đổi trong các phiên bản khác nhau của cùng một trình duyệt.
select name, weight from system where type = 'module' order by weight ASC, name
Drupal.behaviors
; như tôi đã báo cáo $.each(Drupal.behaviors)
liệt kê các đối tượng theo cùng thứ tự chúng được chèn, không dựa trên định danh của chúng.
Sử dụng mô-đun Trọng lượng hành vi .
(Vui lòng thử nghiệm trước khi sử dụng trên trang sản xuất)
Mô-đun cho phép gắn trọng số với các hành vi, và sau đó nó chiếm quyền điều khiển / thay thế drupal.attachBehaviors
bằng cách thực hiện tùy chỉnh, tôn trọng các trọng số.
Tại sao không phải là trọng lượng mô-đun thay thế, như đề xuất trong câu trả lời khác?
Xem
thứ tự của các trường trong một đối tượng javascript có thể dự đoán được khi lặp qua chúng không? và
thứ tự các yếu tố - vòng lặp (cho trong lỗi) trong javascript .
Đối với Drupal 6 -
Một giải pháp đơn giản, nếu điều này không cần phải di động là đặt mã JS bạn muốn chạy cuối cùng vào tệp template.php. Các cuộc gọi drupal_add_js chủ đề luôn được gọi sau các mô-đun.
Nếu nó cần phải di động, giải pháp "sạch nhất" trong drupal 6 là thêm một mô-đun mới có trọng lượng khác với mô-đun của bạn bằng php. Bạn thậm chí có thể có hai mô-đun trong cùng một thư mục, làm cho mô-đun đầu tiên phụ thuộc vào đầu tiên và điều chỉnh các trọng số trong các móc cài đặt / cập nhật. Không có cái nào là cần thiết, chỉ làm cho việc cài đặt dễ dàng hơn.