Spuštění STARTUP metody až po události – proč?
- nedik
- Člen | 9
Jsem tak trošku začátečník, tak se nezlobte, že pokládám asi
zbytečnou otázku.
Nyní zkouším AJAX a používání snippetů. Už mi to celkem funguje, ale
přišel jsem na zajímavou věc. Asi nejlepší na příkladě:
<?php
function createComponentConfiguratorForm()
{
$form = new Nette\Application\UI\Form($this, 'configuratorForm');
$form->addProtection();
$form->onSubmit[] = $this->changeOnFormSended;
return $form;
}
public function changeOnFormSended()
{
if ($this->presenter->isAjax())
{
// odesleme vystrizek stranky
$this->invalidateControl('configurator');
$this->presenter->actionEngine($this->model_idprod);
$this->presenter->invalidateControl('configurator-nojs');
}
}
public function startup()
{
$this->engine_idprod = $this->presenter->getParam('engine_idprod', 0);
$this->model_idprod = $this->presenter->getParam('model_idprod', 0);
$this->brand_idprod = $this->presenter->getParam('brand_idprod', 0);
}
?>
Pořád mi to vyhazovalo chybu, že $this->model_idprod není definován v metode changeOnFormSended. Ale on je definován ve startup. Nějak jsem tomu nerozuměl, až pak jsem přišel na to, že metoda startup je volána až po metodě changeOnFormSended. Jak je to možné? Vždyť Nette volá startup přece hned na začátku při volání objektu, nebo jsem na omylu?
Když jsem do metody changeOnFormSended přidal $this->startup() tak to začalo normálně fungovat.
Tedy otázka: **Kdy je a kdy teda není volán starup ve třídě? **
- jiri.pudil
- Nette Blogger | 1032
Nette volá startup()
na začátku životního cyklu
presenteru. V komponentách to takhle nefunguje.
Editoval jiri.pudil (9. 3. 2013 11:42)