Signal receiver u přetěžovaných komponent
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- thirdknown
- Člen | 26
Ahojte,
podle této diskuze vyrábím přetěžované komponenty:
public function createComponentEditDescriptionForm($id) {
$form = new Nette\Application\UI\Form();
$form->addText('description', 'Popis');
$form->addSubmit('submit', 'Vytvořit nový obor');
$form->onSuccess[] = callback($this, 'editDescriptionFormSubmitted');
return $form;
}
public function renderDefault() {
foreach ($array as $description) {
$this['editDescriptionForm' . $description->id] = $this->createComponentEditDescriptionForm($description->id);
}
}
a v latte už vytvářím componenty takto:
{foreach $descriptions as $id => $description}
{control "editDescriptionForm$id"}
{/foreach}
Problém je, že po submitu formuláře mi nette vyhodí, že
The signal receiver component ‚editSpecializationForm1‘ is not
found.,
i když příslušná metoda existuje:
public function editDescriptionFormSubmitted(Nette\Application\UI\Form $form) {
$values = $form->getValues();
...
}
Co bych měl kam přidat, aby to makalo?
Když nepřetěžuju componenty, ona metoda po submitu se zavolá.
Díky
- mkoubik
- Člen | 728
Zpracování signálu probíhá ještě před render metodou, takže ty komponenty v té době neexistují. Původní vlákno jsem nečetl, ale pokud chápu správně o co se snažíš tak by se ti spíš hodil Multiplier.