Jeg vil bare vide, hvordan vi kan opnå to ajax-tilbagekald på en formularindsendelse. Er det muligt? og hvordan?
Svar
Nej, det er ikke muligt. Hvorfor ville det være? Ajax callback kan returnere et stykke HTML for at erstatte din AJAX-indpakning. Hvis du vil ringe til to, hvilken vil Drupal bruge? Hvordan skal det afgøre? Derfor defineres #ajax["callback"]
som et navn på en funktion, ikke et matrix med navne. Med en funktion du undgår sådanne problemer.
Hvis du har brug for at ringe til to funktioner som svar på AJAX-begivenheden, skal du skrive et tilbagekald, der inkluderer den logik, jeg spurgte om i første afsnit, og de opkaldsfunktioner, du har brug for fra den tilbagekald .
Svar
Du kan ikke gøre det direkte. Brug i stedet en funktion, der kalder de to andre funktioner.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Derefter:
my_callbacks_wrapper($form, $form_state) { $first_callback_processed_form = first_callback($form, $form_state); $second_callback_processed_form = second_callback($first_callback_processed_form, $form_state); return $second_callback_processed_form; }
Sørg for, at dine tilbagekald ikke forstyrrer.
Kommentarer
- Har en opstemning. Også nyttigt at huske på, at et Ajax-tilbagekald returnerer en array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ -kommandoer); Det kan være, at det ' er enklere at ringe til det første tilbagekald og derefter tilføje nogle værdier til arrayet #commands i stedet for at ringe det andet tilbagekald. Det kan være duplikering af funktionalitet, men det kan også være, at hele tilbagekaldet ikke er ' t krævet.
- Ja griz, du har ret. exmaple er meget simpelt, men som du siger, ' ville det være bedre at flette re resultater af de to funktioner. Men husk, at brug af to funktioner er et hack.
- @tunic – > Er det muligt at have to omslagselementer?