Puncte:0

Cum să definiți unde să afișați form_state->setError atunci când utilizați mai multe apeluri ajax?

drapel cn

Lucrez la unele funcționalități personalizate în interiorul unui tabel de vizualizare care permite un formular de „editare rapidă” ca câmp disponibil prin pluginul câmpului de vizualizări.

Formularul este redat pentru fiecare rând separat folosind un sub_id unic transmis generatorului de formulare pentru fiecare rând.

Am formularul care funcționează și trimite corect lucrurile, dar problema este că trebuie să fac două lucruri pe apel invers ajax, așa că folosesc sistemul AjaxResponse() pentru a face două acțiuni diferite.

Prima acțiune este actualizarea „valorii” unei anumite coloane din rândul de vizualizări. Al doilea este, în esență, doar returnarea $form; pentru a returna formularul.

Problema este că atunci când formularul face validarea, validarea funcționează, cu excepția faptului că mesajele nu apar până când nu reîmprospătesc pagina. Nu pot să-mi dau seama cum să-i spun ce wrapper să folosesc pentru a afișa mesajul formular, deoarece transmit două diferite răspunsului ajax, deoarece trebuie să fac două modificări.

Codul pe care îl folosesc în interiorul apelului meu ajax este următorul:

funcția publică quickEditAjax(&$form, FormStateInterface $form_state) {
    $valori = $form_state->getValues();

    $răspuns = AjaxResponse nou();

    $status = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($values['status']);
    $response->addCommand(new ReplaceCommand('.request-status-'. $values['id'], $status->getName()));
    $response->addCommand(new ReplaceCommand('#quick-edit-wrapper-'. $this->sub_id,$form));

    returnează $răspuns;
  }

În unde #quick-edit-wrapper-$this->sub_id este #id-ul unic setat pe formular și .request-status-$values['id'] este clasa atașată la coloana de vizualizare a tabelului pe care încerc să o schimb.

Atât forma, cât și coloana tabelului au id-ul și clasa corecte pe ele, iar coloana se actualizează cu succes prin apelarea ajax addCommand().

Mesajele de eroare de validare nu apar în niciunul dintre ambalaje, dar aș dori să apară în #quick-edit-wrapper învelitoare. Dacă nu există erori de validare și trimiterea trece, trec și un mesaj de succes și nici acel mesaj nu apare până nu reîmprospătează pagina.

Există vreo modalitate prin care pot spune mesajelor în ce wrapper să redau? Răspunsul ajax pare să fie confundat cu care să utilizați.

Puncte:1
drapel cn

Adăugați un bloc de mesaje de stare în formular:

dacă ($form_state->hasAnyErrors()) {
  $form['status_messages'] = [
    '#type' => 'status_messages',
    '#weight' => -1000,
  ];
  $form['#sorted'] = FALS;
}
$response->addCommand(new ReplaceCommand('#quick-edit-wrapper-' . $this->sub_id, $form));
Ex0r avatar
drapel cn
A funcționat perfect! Mulțumesc.

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.