Kan jeg ringe to tilbakeringingsfunksjoner i en ajax-samtale?

Jeg vil bare vite hvordan vi kan oppnå to ajax tilbakeringinger på ett skjema. Er det mulig? og hvordan?

Svar

Nei, det er ikke mulig. Hvorfor ville det være? Ajax tilbakeringing kan returnere et stykke HTML for å erstatte AJAX-innpakningen. Hvis du vil ringe to, hvilken vil Drupal bruke? Hvordan skal den bestemme? Det er derfor #ajax["callback"] er definert som et navn på en funksjon, ikke en matrise med navn. Med en funksjon du unngår problemer som det.

Hvis du trenger å ringe to funksjoner som svar på AJAX-hendelsen, så skriv en tilbakeringing som inkluderer logikken jeg spurte om i første avsnitt, og samtalefunksjoner du trenger fra den tilbakeringingen .

Svar

Du kan ikke gjøre det direkte. Bruk i stedet en funksjon som kaller de to andre funksjonene.

"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ... 

Deretter:

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; } 

Forsikre deg om at tilbakeringingene dine ikke forstyrrer.

Kommentarer

  • Ha en oppstemning. Også nyttig å huske på at en Ajax-tilbakeringing returnerer en array: return array (' #type ' = > ' ajax ', ' #kommandoer ' = > $ -kommandoer); Det kan være at det ' er enklere å ringe den første tilbakeringingen, og deretter legge til noen verdier i #commands-arrayet i stedet for å ringe den andre tilbakeringingen. Det kan være dupliserende funksjonalitet, men det kan også være at hele tilbakeringingen ikke er ' t nødvendig.
  • Ja griz, du har rett. exmaple er veldig enkelt, men som du sier det ' det er bedre å slå sammen resultater av de to funksjonene. Men husk at bruk av to funksjoner er et hack.
  • @tunic – > Er det mulig å ha to omslagselementer?

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *