Puncte:1

Cum se adaugă un ID de wrapper unic la un element widget?

drapel lb

Am realizat un widget care „generează” câmpuri pe baza opțiunii alese pentru un câmp selectat. Am terminat cea mai mare parte a logicii:

1- Se alege o opțiune din acest câmp:

 $element['valoare'] = [
  '#type' => 'selectați',
  '#options' => $this->getBreakpointsGroups(),
  '#default_value' => $valoare,
  '#ajax' => [
    'callback' => [$this,'updateBreakpoint'], // nu uitați :: când apelați o metodă de clasă.
    'eveniment' => 'schimbare',
    'wrapper' => $wrapper_id, // Acest element este actualizat cu acest apel invers AJAX.
    'method' => 'html',
  ]
];  

2-Apoi se execută funcția updateBreakpoint și se procedează la actualizarea formularului. Mai întâi extrag valoarea wrapper-ului în cazul în care există mai multe forme de widget, astfel încât să nu țintească o altă instanță a aceluiași formular.

    $state = $form_state->getTriggeringElement();
    $wrapper_id = $state['#ajax']['wrapper'];

3- După ce am făcut unele modificări în formular, returnez modificările și folosesc o comandă AJAX

    $ajax_response = AjaxResponse nou();
    $ajax_response->addCommand(new HtmlCommand("div#{$wrapper_id}", $form['image_fieldset']));
    returnează $ajax_response;

Wrapper-ul este definit în interiorul funcției formElement în următorul mod:

    $wrapper_id = Html::getUniqueId('wrapper');

Problema este că nu se face nicio modificare. Când definesc $wrapper_id ca un șir fără funcții unice de id (de exemplu, „wrapper”), modificările sunt făcute.Sunt confuz de ce. Am avut grijă să verific valoarea wrapper-ului a persistat în toată forma.

berliner avatar
drapel bd
Cred că ar fi de ajutor să vă vedeți codul complet pentru metoda generatorului de formulare și metoda `updateBreakpoint`.
Puncte:0
drapel cn

Dacă aveți mai multe wrapper-uri pe aceeași pagină, nu vă puteți baza doar pe Html::getUniqueId. Trebuie să adăugați cât mai multe informații previzibile disponibile.

De exemplu, într-un singur element widget câmp puteți adăuga numele câmpului, părinții câmpului și delta câmpului:

$nume_câmp = $this->fieldDefinition->getName();
$parinti = $form['#parinti'];
$prefix = implode('-', array_merge($parinti, [$nume_câmp, $delta]));

$wrapper_id = $prefix . '-my-wrapper';

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.