Puncte:1

Folosind un apel invers #submit într-un câmp de text

drapel cn

Avem nevoie să adăugăm „câmpuri repetabile” la un formular pe baza intrării furnizate într-un câmp text. De obicei, folosim un buton „adăugați un alt” pentru a urmări numărul de câmpuri de redat în buildForm(), și actualizați acel număr într-un apel invers de trimitere pe butonul.

Totuși, funcționalitatea pe care o dorim nu este asta. Avem nevoie ca atunci când cineva introduce text într-un câmp de text (altul decât gol), să adauge un grup suplimentar de câmpuri sub acesta. Le permitem oamenilor să scaneze coduri de bare și de fiecare dată când scanează un cod de bare într-un câmp de text, dorim ca acesta să creeze un alt grup de câmpuri, astfel încât să poată scana un alt articol dacă doresc.

Am încercat să folosim #Trimite în câmpul text, dar #submit nu pare să se declanșeze în câmpul text, deoarece am adăugat o declarație de tipărire, precum și o $form-state->set() acolo și încercați să imprimați $form_state->get() pe formular fără niciun rezultat.

Deoarece nu puteți actualiza form_state în interiorul unui apel invers Ajax, nu putem găsi o modalitate de a realiza ceea ce vrem să facem (Adăugați un alt grup de câmpuri odată ce textul este introdus într-o zonă de text).

Există o altă modalitate prin care putem face asta?

(Permitem adăugarea a doar 10 grupuri per trimitere, așa că, ca „soluție de soluție”, adăugăm dinamic 10 grupuri în buildForm, apoi folosim #state pentru a le ascunde pe fiecare dacă câmpul de text anterior nu are date, dar acest lucru nu ne permite să adăugăm un buton de „eliminare” pentru fiecare câmp de text, astfel încât utilizatorul să poată elimina câmpurile de text pe care nu dorește să le folosească.)

4uk4 avatar
drapel cn
Fluxul de lucru de bază al unei cereri Ajax este să verificați reconstrucția formularului `$form_state->getTriggeringElement()` și să construiți un formular cu câte elemente de formular noi doriți.
Gold avatar
drapel kz
Unghiul „câmpurilor repetabile” de pe acesta se simte ca ceea ce [Inline Entity Forms](https://www.drupal.org/project/inline_entity_form) s-ar adresa. Acestea funcționează bine cu API-ul State și, de asemenea, vă permit să setați un număr min/max/nelimitat de articole.
Ex0r avatar
drapel cn
Acesta este un formular complet bazat pe module, generat și funcțional în interiorul unei metode buldForm(). Nu există entități atașate formularului.
Ex0r avatar
drapel cn
Și în ceea ce privește $form_state, primesc deja elementul de declanșare, dar nu pot actualiza starea formularului în interiorul unui callback ajax, așa că nu pot reface formularul cu numărul necesar de câmpuri.
Jaypan avatar
drapel de
Puteți adăuga un buton de trimitere activat pentru ajax cu CSS, apoi utilizați JS pentru a „face clic” pe el la tastare (sau la estompare sau orice altceva) declanșând #ajax. Puteți pune handlerul de trimitere pe butonul de trimitere.
4uk4 avatar
drapel cn
Nu este nevoie de un handler de trimitere atunci când reconstruiți un formular prin Ajax. Indiferent ce încercați să faceți în handlerul de trimitere, mutați-l în buildForm() verificând elementul de declanșare în $form_state.

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.