Jag vill bara veta hur vi kan uppnå två ajax-återuppringningar på en formulärsändning. Är det möjligt? och hur?
Svar
Nej, det är inte möjligt. Varför skulle det vara? Ajax-återuppringning kan returnera en bit HTML för att ersätta ditt AJAX-omslag. Om du kommer att ringa två, vilken skulle Drupal använda? Hur ska det avgöra? Därför definieras #ajax["callback"]
som ett namn på en funktion, inte en matris med namn. Med en funktion du undviker sådana problem.
Om du behöver ringa två funktioner som svar på AJAX-händelsen, skriv sedan en återuppringning som innehåller den logik jag frågade om i första stycket och samtalsfunktioner du behöver från den återuppringningen .
Svar
Du kan inte göra det direkt. Använd istället en funktion som anropar de två andra funktionerna.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Sedan:
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; }
Se till att dina återuppringningar inte stör.
Kommentarer
- Har en uppröstning. Det är också bra att tänka på att en Ajax-återuppringning returnerar en array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ -kommandon); Det kan vara så att det ' är enklare att ringa den första återuppringningen och sedan lägga till några värden i arrayen #commands snarare än att ringa den andra återuppringningen. Det kan vara duplicering av funktionalitet, men det kan också vara att hela återuppringningen inte är ' t krävs.
- Ja griz, du har rätt. exmaple är väldigt enkelt, men som du säger är det ' bättre att slå samman re resultat av de två funktionerna. Men kom ihåg att använda två funktioner är ett hack.
- @tunic – > Är det möjligt att ha två omslagselement?