Chcę tylko wiedzieć, w jaki sposób możemy uzyskać dwa wywołania zwrotne Ajax w jednym przesłaniu formularza. Czy to możliwe? i jak?
Odpowiedź
Nie, nie jest to możliwe. Dlaczego miałoby to być? Wywołanie zwrotne AJAX może zwrócić fragment kodu HTML, aby zastąpić opakowanie AJAX. Jeśli zadzwonisz do dwóch, z którego skorzystałby Drupal? Jak to powinno zadecydować? Dlatego właśnie #ajax["callback"]
jest zdefiniowane jako nazwa funkcji, a nie tablica nazw. Z jedną funkcją unikniesz takich problemów.
Jeśli potrzebujesz wywołać dwie funkcje w odpowiedzi na zdarzenie AJAX, napisz callback, który będzie zawierał logikę, o którą pytałem w pierwszym akapicie, i wywołaj funkcje, których potrzebujesz z tego wywołania zwrotnego .
Odpowiedź
Nie możesz tego zrobić bezpośrednio. Zamiast tego użyj funkcji, która wywołuje dwie inne funkcje.
"#ajax" => array( "callback" => "my_callbacks_wrapper", ) ...
Następnie:
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; }
Upewnij się, że wywołania zwrotne nie przeszkadzają.
Komentarze
- Głos za. Warto też pamiętać, że wywołanie zwrotne Ajax zwraca array: return array (' #type ' = > ' ajax ', ' #commands ' = > $ commands); Może być tak, że ' prościej jest wywołać pierwsze wywołanie zwrotne, a następnie dodać pewne wartości do tablicy #commands zamiast wywoływać drugie wywołanie zwrotne. Może to być funkcja powielania, ale może się też zdarzyć, że całe wywołanie zwrotne nie jest ' t wymagane.
- Tak, griz, masz rację. przykład jest bardzo prosty, ale jak mówisz ' d lepiej byłoby scalić wyniki dwóch funkcji. Pamiętaj jednak, że używanie dwóch funkcji to hack.
- @tunic – > Czy można mieć dwa elementy opakowania?