Dynamický formulář a signál
- michal.lohnisky
- Člen | 64
Zdravím,
mám dynamicky se měnící formulář, myšlenkou podobný tomuto.
Mezi dynamicky se měnícími inputy mám autocomplete – komponentu vlastní
výroby, která po zadání několika prvních písmen vyhledává záznamy
(např. jména osob) v databázi. Vyhledávání je řešeno signálem, jehož
handler provede callback, který se zadává při deklaraci
autocomplete inputu
<?php $form->addAutocomplete()->setSuggestCallback(function($term){ ... }) ?>
. Výsledky se mi vrací jako JSON.
Můj problém je v tom, že při signálu pro autocomplete posílám pouze
zadaný řetězec ($term
), název formu a název inputu
autocomplete (abych mohl přistoupit ke callbacku). Protože však signál
neposílá všechny hodnoty formuláře (a také na co, když při hledání
termu v DB nejsou potřeba), tak se formulář vytvoří bez autocompletu, tedy
nemohu přistoupit k funkci callbacku a vše skončí s chybou.
Existuje na toto nějaké jednoduché řešení? Jedno řešení jsem implementoval, ale je trochu složitější – spíše jde o takový návrhový vzor pro celkovou invalidaci jakéhokoliv snippetu v komponentách a formulářích a i v takovémto případě.
- Vojtěch Dobeš
- Gold Partner | 1316
Nebylo by mnohem jednodušší přepsat ten autocomplete vlastní výroby
tak, aby nepotřeboval provádět tolik akcí? Možná mi teď něco uniká, ale
implementoval bych ho jako <input>
s datovým atributem, kde
bych si uložil vygenerovaný odkaz na nějaký ten signál (presenteru – ten
bych zadal do toho setSuggestCallback
, něco jako
setSuggestSignal('foo')
a odpovídající handleFoo
),
no a javascript už by jen prováděl dotaz na ten signál?
Více vazeb tam přeci být nemusí, ne?
- michal.lohnisky
- Člen | 64
Já jsem ten autocomplete založil na TagInputu, kde se právě nastavuje callback přímo u inputu ve formu. Což mi také přijde jako nejlepší místo, protože pokud bych chtěl použít formulář ve více presenterech, musel bych ten callback přesouvat do společného předka – musel bych na to myslet a je to práce navíc, takže jsem hledal nějaké lepší řešení.