ฉันมีโมดูลที่กำหนดเองและในไฟล์ .module ฉันเพิ่มค่าให้กับการตั้งค่า Drupal:
$variables['#attached']['drupalSettings']['my module']['color_body'] = '#dd0000';
ฉันมีฟังก์ชั่นชื่อ js และพยายามเข้าถึงค่า:
ฟังก์ชัน loadcal() {
var backgroundColor = drupalSettings.mymodule.color_body;
}
ฉันได้รับข้อผิดพลาด:
Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติของไม่ได้กำหนด (อ่าน 'โมดูลของฉัน')
ที่ Object.attach (loadcal.js?rb7yo3:52:37)
ตัวอย่างการทำงานทั้งหมดของการใช้ drupalSettings ดูเหมือนจะเป็นฟังก์ชันที่ไม่ระบุชื่อ:
(ฟังก์ชัน ($) {}
ฉันสามารถ refactor เพื่อทำสิ่งนี้เป็นฟังก์ชัน DOMready แต่ต้องการให้ฟังก์ชันนี้เรียกใช้ได้ ฉันเหนื่อย:
(ฟังก์ชัน loadcal($) {}
แต่นั่นทำให้ไม่พบ loadcal() เมื่อมีการเรียกใช้
อัปเดต
ฉันตัดสินใจว่าฉันสามารถทำได้โดยไม่ต้องตั้งชื่อฟังก์ชัน ฉันสามารถผ่านสิ่งที่ฉันต้องการในตอนเริ่มต้นและไม่ต้องโทรออกในภายหลัง นี่คือรหัสที่เกี่ยวข้อง:
mymodule.libraries
mymodule.calendar:
css:
ส่วนประกอบ:
css/calendar.css: {}
จส:
js/loadcal.js: { น้ำหนัก: -18 }
การพึ่งพา:
- หลัก / Drupal
- คอร์/jQuery
- การตั้งค่าหลัก / drupal
mymodule.module
ฟังก์ชัน mymodule_preprocess_node ($ ตัวแปร) {
$config = \Drupal::config('mymodule.settings');
$variables['#attached']['library'][] = 'mymodule/mymodule.calendar';
$variables['#attached']['drupalSettings']['mymodule']['color_body'] = '#dd0000';
}
loadcal.js
(ฟังก์ชัน (Drupal, drupalSettings ครั้งเดียว) {
Drupal.behaviors.mymodule = {
แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
ปฏิทิน var = ใหม่ FullCalendar.Calendar (calendarEl, {
dayCellDidMount: ({วันที่ เอล}) => {
el.style.backgroundColor = drupalSettings.mymodule.color_body;
}
}
}
)}
ข้อผิดพลาดของคอนโซลคือ:
Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติของไม่ได้กำหนด (อ่าน 'color_body')
แม้ว่าเมื่อตรวจสอบ drupalSettings และการตั้งค่าภายใต้ Closure (ไฟล์แนบ) หรือ Closure.drupalSettings จะไม่มี mymodule แม้ว่าจะแสดงภายใต้ Drupal.behaviors