ฉันกำลังพยายามค้นหากิจกรรมที่ฉันสามารถสมัครรับข้อมูลด้วยวิธี addMessage
ฉันต้องทริกเกอร์รหัสทุกครั้งที่มีการเพิ่มข้อความสถานะ ในการตอบสนองต่อเหตุการณ์นี้ ฉันต้องส่งตัวแปรจาก php ไปยัง JS ฉันไม่พบกิจกรรมที่จะสมัคร ดังนั้นฉันจึงใช้กระบวนการล่วงหน้าด้านล่างแทน
<?php
ฟังก์ชัน mymodule_preprocess_status_messages(&$ตัวแปร) {
$variables['#attached']['drupalSettings']['send_me_to_js']['_variable'] = 'ไปที่ js...';
}
การประมวลผลล่วงหน้านี้ทำงานทุกครั้งที่ใช้ addMessage และข้อความแสดงสถานะปรากฏขึ้น แต่ตัวแปรที่ฉันต้องการส่งไปยัง JS ไม่ได้ถูกส่งเสมอไป
ตัวอย่างเช่น ใช้ได้กับข้อความที่สร้างจากคอร์ และฉันได้รับตัวแปรใน JS แต่เมื่อ Drupal Commerce ใช้ addMessage (เช่น เมื่อเพิ่มสินค้าลงในรถเข็นในการตั้งค่า ajax) การประมวลผลล่วงหน้าจะทำงาน ข้อความแสดงสถานะจะแสดงขึ้น แต่ตัวแปรไม่พร้อมใช้งานใน JS
นี่คือจาวาสคริปต์:
(ฟังก์ชัน ($, Drupal, drupalSettings) {
Drupal.behaviors.alwave_alerts = {
แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
$('.my-class', context).once('unique-string').each(function () {
// เรียกใช้หลังจากการเรียก ajax แต่ละครั้ง
$(เอกสาร).ajaxComplete(ฟังก์ชัน () {
// บางครั้งสิ่งนี้ไม่ได้กำหนดแม้ว่าการประมวลผลล่วงหน้าด้านบนจะทำงาน
// และมีข้อความแสดงสถานะบนหน้าจอ
// (เช่น เมื่อการค้าสร้างข้อความแสดงสถานะ)
console.log(settings.send_me_to_js);
});
});
}
};
}(jQuery, Drupal, drupalSettings));
ต้องมีวิธีที่ง่าย?
อัปเดต:
ฉันค้นพบว่าการประมวลผลล่วงหน้าไม่ได้ส่งตัวแปรไปยังจาวาสคริปต์ในคำขอ ajax เท่านั้น ในการโหลดหน้าแรก มันจะถูกส่ง แต่คำขอ ajax ที่ตามมาจะไม่ส่งตัวแปรนี้ไปยัง JS ดูเหมือนจะเป็นลำดับที่สิ่งต่าง ๆ ถูกดำเนินการระหว่างคำขอ ajax
คำถามคือ ฉันจะส่งตัวแปรไปยัง JS จากการประมวลผลล่วงหน้านี้ในการเรียก ajax ได้อย่างไร