Spuštění STARTUP metody až po události – proč?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nedik
Člen | 9
+
0
-

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
+
0
-

Nette volá startup() na začátku životního cyklu presenteru. V komponentách to takhle nefunguje.

Editoval jiri.pudil (9. 3. 2013 11:42)

nedik
Člen | 9
+
0
-

Díky za odpověď. Je někde možné sehnat nějaký flow list, co vlastně nette dělá, když jde do komponenty? (tak jako je životní cyklus presenteru popsaný někde v dokumentaci)

nanuqcz
Člen | 822
+
0
-

Nedik:
Životní cyklus komponenty:

  1. __construct()
  2. attached()
  3. handlery (tzn. i tvůj changeOnFormSended())
  4. render()
  5. __destruct()

U komponent se metoda startup() vůbec automaticky nespouští, to jen u presenterů.

Editoval nanuqcz (9. 3. 2013 14:02)

Filip Procházka
Moderator | 4668
+
0
-

Ještě jsi zapomněl na attached

nanuqcz
Člen | 822
+
0
-

Nezapomněl, ale nevěděl jsem přesně, kdy se volá :-D Díky za odkaz, doplnil jsem do původního příspěvku, snad dobře :-)

Editoval nanuqcz (9. 3. 2013 14:02)