Tôi có một mô-đun tùy chỉnh và trong tệp .module của nó, tôi thêm một giá trị vào cài đặt Drupal:
$variables['#attached']['drupalSettings']['mô-đun của tôi']['color_body'] = '#dd0000';
Tôi có một hàm js được đặt tên và cố gắng truy cập giá trị:
hàm loadcal() {
var backgroundColor = drupalSettings.mymodule.color_body;
}
tôi nhận được lỗi:
Uncaught TypeError: Không thể đọc các thuộc tính của không xác định (đọc 'mô-đun của tôi')
tại Object.attach (loadcal.js?rb7yo3:52:37)
Tất cả các ví dụ hoạt động về việc sử dụng drupalSettings dường như đều có chức năng ẩn danh:
(hàm ($) {}
Tôi có thể cấu trúc lại để thực hiện việc này dưới dạng hàm DOMready, nhưng muốn hàm này có thể gọi được hơn. Tôi đã thử:
(hàm nạp($) {}
nhưng điều đó khiến loadcal() không được tìm thấy khi nó được gọi.
CẬP NHẬT
Tôi quyết định tôi có thể làm mà không cần đặt tên cho chức năng. Tôi có thể chuyển những gì tôi cần ngay từ đầu và không phải thực hiện các cuộc gọi tiếp theo. Đây là mã liên quan:
mymodule.libraries
mymodule.calendar:
css:
thành phần:
css/calendar.css: {}
js:
js/loadcal.js: { trọng lượng: -18 }
phụ thuộc:
- lõi/Drupal
- lõi/jQuery
- lõi/drupalSettings
mymodule.module
function mymodule_pre process_node($variables) {
$config = \Drupal::config('mymodule.settings');
$variables['#attached']['library'][] = 'mymodule/mymodule.calendar';
$variables['#attached']['drupalSettings']['mymodule']['color_body'] = '#dd0000';
}
loadcal.js
(hàm (Drupal, drupalSettings, once) {
Drupal.behaviors.mymodule = {
đính kèm: chức năng (bối cảnh, cài đặt) {
lịch var = new FullCalendar.Calendar(calendarEl, {
dayCellDidMount: ({date, el}) => {
el.style.backgroundColor = drupalSettings.mymodule.color_body;
}
}
}
)}
Lỗi bảng điều khiển là:
Uncaught TypeError: Không thể đọc các thuộc tính không xác định (đọc 'color_body')
mặc dù khi kiểm tra drupalSettings và cài đặt trong Closure (attach) hoặc Closure.drupalSettings, mymodule không có ở đó, mặc dù nó hiển thị trong Drupal.behaviors.