Tôi đang cố gắng tìm một sự kiện mà tôi có thể đăng ký cho phương thức addMessage.
Tôi cần kích hoạt một số mã mỗi khi thêm thông báo trạng thái. Khi phản ứng với sự kiện này, tôi cần gửi một biến từ php sang JS. Tôi không thể tìm thấy một sự kiện để đăng ký nên thay vào đó tôi đã sử dụng một quy trình tiền xử lý bên dưới.
<?php
function mymodule_pre process_status_messages(&$variables) {
$variables['#attached']['drupalSettings']['send_me_to_js']['_variable'] = 'Chuyển tới js...';
}
Quá trình tiền xử lý này chạy mỗi khi addMessage được sử dụng và một thông báo trạng thái được hiển thị, nhưng biến mà tôi cần gửi tới JS, không phải lúc nào cũng được gửi.
Ví dụ: điều này hoạt động đối với các thông báo được tạo từ lõi và tôi nhận được biến trong JS. Nhưng khi Drupal Commerce sử dụng addMessage (ví dụ: khi thêm sản phẩm vào giỏ hàng trong thiết lập ajax), quy trình tiền xử lý sẽ chạy, thông báo trạng thái hiển thị nhưng biến không có sẵn trong JS.
Đây là javascript:
(hàm ($, Drupal, drupalSettings) {
Drupal.behaviors.alwave_alerts = {
đính kèm: chức năng (bối cảnh, cài đặt) {
$('.my-class', context).once('unique-string').each(function () {
// Chạy sau mỗi lệnh gọi ajax
$(tài liệu).ajaxComplete(hàm () {
// Điều này đôi khi không được xác định mặc dù tiền xử lý ở trên chạy
// và có một thông báo trạng thái trên màn hình
// (ví dụ: khi thương mại tạo thông báo trạng thái)
console.log(settings.send_me_to_js);
});
});
}
};
}(jQuery, Drupal, drupalSettings));
Phải có một cách dễ dàng?
Cập nhật:
Tôi phát hiện ra rằng tiền xử lý không chỉ gửi biến tới javascript theo yêu cầu ajax. Khi tải trang đầu tiên, nó được gửi, nhưng các yêu cầu ajax tiếp theo không gửi biến này tới JS. Có vẻ là trình tự thứ tự trong đó mọi thứ được thực thi trong các yêu cầu ajax.
Vì vậy, câu hỏi là, Làm cách nào để tôi gửi một biến tới JS từ tiền xử lý này trên các cuộc gọi ajax?