Formular v komponente – nefunguje callback
- krucinal
- Člen | 38
Ahoj, nekde nejspis delam chybu a netusim kde. Mam nejakou komponentu a v ni
formular. Na formulari mam nastavene onSuccess[] = callback($this,
‚nejakaMetoda‘); ale ta se pri odeslani formulare vubec nezavola (zkousel
jsem i onSubmit[] abych vyloucil problemy s validaci, ale vysledek stejny.
V template formular vykresluji {$filterForm}
V jine komponente mi obdobnym zpusobem formular funguje.
Otazka zni, co vse je ke spravnemu fungovani callbacku v komponente potreba a jak mam postupovat pri hledani chyby?
V kostce to mam nejak takto:
use Nette\Application\UI;
use Nette\Application\UI\Form;
class Datalist extends UI\Control
{
/** @var \Nette\Application\UI\Form $filterForm */
private $filterForm;
public function __construct(BasePresenter $parent, $name)
{
parent::__construct($parent, $name);
$this->filterForm = new Form($this,'datalistFilter');
...
$this->filterForm->addSubmit('submit', 'Hledat');
$this->filterForm->onSuccess[] = callback($this, 'filterSubmitted');
}
public function filterSubmitted($form)
{
// nejaky kod
}
public function render()
{
...
$this->template->filterForm = $this->filterForm;
...
}
}
Editoval krucinal (7. 3. 2012 15:34)
- krucinal
- Člen | 38
Noo, v presenteru mam napr. toto:
protected function createComponentDatalist($name)
{
return new Datalist\Users($this, $name);
}
… z template volam pomoci {control Datalist} vraci to instanci tridy ve ktere je napr. toto:
<?php
namespace Datalist;
class Users extends \Datalist
{
public function __construct(\BasePresenter $parent = NULL, $name = NULL)
{
parent::__construct($parent, $name);
...
}
}
.. coz je model cehosi a rozsiruje tridu komponenty kterou jsem uvedl na zacatku.
Kdyz to tak pozoruju, tak jediny rozdil oproti komponente kde mi formularove callbacky funguji je v tom, ze tady neinstancuju komponentu primo z presenteru, ale instancuju tridu ktera komponentu rozsiruje. To by ale snad nemel byt nejaky problem. Nebo jo?
- krucinal
- Člen | 38
Jestli mas na mysli \Datalist\Users tak ano. Vzhledem k tomu ze je to konstruktor a prekryva konstruktor rodicovske tridy \Datalist, tak by to bez toho neslo. Do komponenty tak predavam objekt presenteru a $name (ktere pak strkam dal do UI\Control). Bez toho se mi komponenta nepripoji k presenteru.
- krucinal
- Člen | 38
Ot@s napsal(a):
Formulář není připojen k presenteru. Nemáš v
\Datalist\Users
nějakýattached
? Zkontroluj si URL po submitu onoho formuláře, jaká je tam hodnota signálu (hodnota parametru do). Odpovídá hierarchii volaných komponent?
Nevim co myslis pod pojmem attached
.
Po odeslani formu mam v url ?do=datalist-filterForm-submit …
imho v poradku. Na presenter je napojena komponenta Datalist, na nej pak
formular filterForm. S nazvy v signalu to sedi – tedy az na male d
v datalist.