Haluan vain tietää, miten voimme saavuttaa kaksi ajax-takaisinsoittoa yhdellä lähetyslomakkeella. Onko mahdollista? ja miten?
Vastaa
Ei, se ei ole mahdollista. Miksi se olisi? Ajax-soittopyyntö voi palauttaa osan HTML-koodista AJAX-kääreen korvaamiseksi. Jos soitat kahdelle, kumpi Drupal käyttää? Kuinka sen pitäisi päättää? Siksi #ajax["callback"]
määritetään funktion nimeksi, ei nimiryhmäksi, yhdellä funktiolla. vältät sellaiset ongelmat.
Jos sinun on soitettava kaksi toimintoa vastauksena AJAX-tapahtumaan, kirjoita takaisinsoitto, joka sisältää logiikan, josta kysyin ensimmäisessä kappaleessa, ja soittotoiminnot, joita tarvitset kyseisestä soittopyynnöstä. .
Vastaa
Et voi tehdä sitä suoraan. Käytä sen sijaan toimintoa, joka kutsuu kaksi muuta toimintoa.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Sitten:
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; }
Varmista, että soittopyynnöt eivät häiritse.
Kommentit
- Onko sinulla äänestys. On myös hyödyllistä pitää mielessä, että Ajax-soittopyyntö palauttaa array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ -komennot); Voi olla, että ' on helpompaa soittaa ensimmäiseen takaisinsoittoon ja lisätä sitten joitain arvoja #commands-ryhmään soittamisen sijaan. toinen soittopyyntö. Se voi olla päällekkäinen toiminnallisuus, mutta voi myös olla, että koko soittopyyntöä ei vaadita. id id = "f2518875a1">
t.