Puncte:0

Valorile drupalSettings pierdute atunci când sunt accesate dintr-o funcție numită

drapel cl

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.

drapel cn
De ce spațiul din „modulul meu”?
apaderno avatar
drapel us
Mesajul de excepție nu se potrivește cu codul afișat. Cu `drupalSettings.mymodule`, nu ar trebui să se plângă de citirea proprietății *my module* a lui `undefined`.
apaderno avatar
drapel us
Puteți folosi fie `(funcție ($) { /* cod */ })(jQuery)` sau `(funcție loadcal($) { /* cod */ })(jQuery)`. Aceasta din urmă ar fi utilă dacă acea funcție se numește singură (ceea ce de obicei nu se întâmplă cu comportamentele Drupal).
drapel cn
Acest lucru se va reduce probabil la modul în care includeți JS în pagină sau cum/când invocați `loadcal()`
apaderno avatar
drapel us
@Clive Da, este adevărat. Trebuie să vedem mai mult cod, dar până acum aceasta pare o întrebare simplă JavaScript.
drapel cn
`$variabile` trebuie să fie `&$variabile` în declarația funcției de preproces
drapel cl
Mulțumesc! Voi remedia asta și voi încerca de îndată ce voi înceta să mă lovesc cu capul de birou :)
drapel cl
Da. Lucrări. Vă rugăm să îl adăugați ca răspuns.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.