[BUG] Odebrání groupy, jejíž prvky jsme odebrali z formuláře, způsobí výjimku
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- _Martin_
- Generous Backer | 679
Ahoj,
pokud si definuji formulář a použiji groupy, následně odeberu prvek, který
je v nějaké groupě a následně i tu groupu, dojde k výjimce. Jde o to,
že groupa si uchovává reference na komponenty, takže pokud jí odeberu
z formuláře, zůstane instance u groupy – a při odebrání groupy se
formulář pokusí odebrat komponentu, kterou v sobě už vlastně nemá.
Řešením je testování (stejně jako při vykreslování
v ConventionalRendereru), zda je komponenta přiřazena k danému formuláři.
Tj. v metodě Form::removeGroup
změnit:
foreach ($group->getControls() as $control) {
$this->removeComponent($control);
}
na
foreach ($group->getControls() as $control) {
if($control->getForm(FALSE) === $this) {
$this->removeComponent($control);
}
}
- David Grudl
- Nette Core | 8228
Možná by bylo ještě rozumnější tam dát
if ($control->getParent()) {
$control->getParent()->removeComponent($control);
}