onClick při změně stavu mezi vykreslením a odesláním formuláře
- lightteka
- Backer | 17
Ahoj,
mám jednoduchý formulář
<?php
class Form
{
public $onDelete = []
function createForm()
{
$form = new \Nette\Application\UI\Form();
// nejaka pole
$form->addSubmit('send');
$deleteSubmit = $form->addSubmit('delete')
->setValidationScope(false)
// Tady je zakopany pes
if (/* je editovany zaznam svazan s jinym zaznamem v db? */) {
$deleteSubmit->setDisabled()
}
$deleteSubmit->onClick[] = function (SubmitButton $button) use ($form) {
$this->onDelete($form, $button);
};
return $form;
}
}
?>
<?php
class MyComponent
{
function createComponentForm()
{
$control = new Form();
$form = $control->createForm();
$form->onSuccess[] = [$this, 'saveItem'];
// Udalost tridy Form
$control->onDelete[] = [$this, 'deleteItem']
}
}
?>
Problem je, ze kdyz nactu formular ve chvili, kdy zaznam neni svazan
s jinym, tak je delete
tlacitko aktivni. Nez na nej kliknu, nekdo
zaznam svaze s jinym, ale ja na tlacitko stale mohu kliknout. Kdyz na nej
kliknu, znovu se provede createForm()
, ale tentokrat je uz tlacitko
neaktivni, takze se nebere v potaz jako isSubmittedBy()
a pouzije
se akce onSuccess
, jako kdybych klikl na send
, a
formular se pokousi data ukladat. Nezobrazi se pak zprava, ze zaznam nejde
smazat protoze je nekde pouzity.
Jde tohle resit na urovni formulare, nebo musim to delete
tlacitko deaktivovat rucne pri vykreslovani a z definice formulare to
setDisable
uplne vyhodit?
Editoval lightteka (29. 1. 2020 1:14)
- David Matějka
- Moderator | 6445
ahoj, zkusil bych navazat to ulozeni na onClick send buttonu namisto na onSuccess formulare
- lightteka
- Backer | 17
Diky, za napad.
To mi v pripade, ze jsem klikl na delete
tlacitko, ktere se
mezi tim nastavilo na neaktivni (zaznam nekdo sparoval s jinym), skoci do
onSubmit
. Ale v predanem parametru $form
nevidim
informaci, ze to bylo odeslano delete
tlacitkem (coz mi dava
smysl).
Formular vykresluju rucne, takze jsem si nakonec do sablony poslal informaci o tom, jestli ma byt tlacitko aktivni nebo ne a z definice formulare to vyhodil.
Diky.