Am un modul personalizat și în fișierul lui .module adaug o valoare setărilor Drupal:
$variables['#attached']['drupalSettings']['my module']['color_body'] = '#dd0000';
Am o funcție numită js și încerc să accesez valoarea:
function loadcal() {
var backgroundColor = drupalSettings.mymodule.color_body;
}
Primesc eroarea:
Eroare de tip neprins: nu pot citi proprietățile nedefinite (se citesc „modulul meu”)
la Object.attach (loadcal.js?rb7yo3:52:37)
Toate exemplele de lucru de utilizare a drupalSettings par să fie cu funcții anonime:
(funcția ($) {}
Pot refactoriza pentru a face acest lucru ca o funcție DOMready, dar aș prefera ca această funcție să fie apelabilă. Am încercat:
(funcția loadcal($) {}
dar asta lasă loadcal() să nu fie găsit atunci când este apelat.
ACTUALIZAȚI
M-am hotărât că mă pot descurca fără ca funcția să fie numită. Aș putea trece ceea ce aveam nevoie la început și nu trebuie să dau apeluri ulterioare. Iată codul implicat:
mymodule.biblioteci
mymodule.calendar:
css:
componenta:
css/calendar.css: {}
js:
js/loadcal.js: { greutate: -18 }
dependențe:
- core/Drupal
- core/jQuery
- core/drupalSettings
mymodule.modul
funcția mymodule_preprocess_node($variabile) {
$config = \Drupal::config('mymodule.settings');
$variables['#attached']['library'][] = 'mymodule/mymodule.calendar';
$variables['#attached']['drupalSettings']['mymodule']['color_body'] = '#dd0000';
}
loadcal.js
(funcție (Drupal, drupalSettings, o dată) {
Drupal.behaviors.mymodule = {
atașați: funcție (context, setări) {
var calendar = new FullCalendar.Calendar(calendarEl, {
dayCellDidMount: ({data, el}) => {
el.style.backgroundColor = drupalSettings.mymodule.color_body;
}
}
}
)}
Eroarea consolei este:
Eroare de tip neprins: nu se pot citi proprietățile lui undefined (se citește „color_body”)
deși când verifici drupalSettings și setările din Closure (atașați) sau Closure.drupalSettings, mymodule nu este acolo, deși apare sub Drupal.behaviors.