Hodnota perzistentniho parametru

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

Jak mohu z rodice komponenty, ktera obsahuje perzistentni promennou, ziskat hodnotu teto perzistentni promenne?

$this->presenter->getPersistentParams('Jmeno tridy');

Nasel jsem pouze ^^, coz vraci pouze nazvy perzistentnich promennych.

Diky!

Mikulas Dite
Člen | 756
+
0
-

Stejně jako každou jinou property, ne? Třeba $this->parent->persistentProperty. Nebo mi něco uniká? Jestli je to kvůli něčemu konkrétnímu, iteruj třeba právě přes ten getPersistentParams().

Edit: tzn.

foreach ($this->parent->getPersistentParams() as $var) {
	echo $this->parent->$var;
}

Editoval Mikulas Dite (25. 3. 2011 22:09)

MartyIX
Člen | 217
+
0
-

@Mikulas: Snad tenhle kod trochu vysvetli, co potrebuju:

class ParentClass extends Control

    protected function getComponent()
    {
        $component = new formComponent();
	// V tomto okamziku bych rad zjistil, jakou ma hodnotu perzistentni
        // promenna z formComponent, ktera urcuje co tato komponenta
        // zrovna zobrazuje, a podle toho bych rad vyrendroval ParentClass control

        return $component;
    }

Editoval MartyIX (25. 3. 2011 22:17)

Mikulas Dite
Člen | 756
+
0
-

Když to nepotřebuješ dynamicky, tak stačí $component->persistentVariable. Persistent musí být public, takže k té property je určitě přístup. V čem je zádrhel?

MartyIX
Člen | 217
+
0
-

@Mikulas: Hodnota je neustale ‚all‘ a nemeni se. Takhle je ta promenna definovana:

/** @persistent */
public $view = 'all';

Pokud vytvarim novou instanci formComponenty, tak aby hodnota perz. promenne $view se zmenila, tak by musel byt nejaky kod v konstruktoru tridy Control, jinak se ta promenna $view nemuze zmenit. Proto mi prijde, ze volani $component->persistentVariable nemuze fungovat v tomto pripade.

arron
Člen | 464
+
0
-

Snazis se IMHO o ziskani te hodnoty prilis brzo. Mechnizmus, ktery zajistuje propagaci hodnot persistentnich parametru pouziva uplne stejne mechanizmy vytvareni komponent jako presentery, takze v dobe tesne po volani new formComponent() jeste nemohl tento mechanizmus cokoliv udelat. Proto ma ta promena defaultni hodnotu. Zkus tu hodnotu te promene ziskavat nekde jinde (action metoda, render metoda), podle toho, v jakem presne kontextu to pouzivas:-)

MartyIX
Člen | 217
+
0
-

arron: Jo, to jsem v podstate psal vyse. Jenze jak to udelat ciste :) Udelal jsem to tedy takto a funguje to:

private $form = null;

protected function getComponent()
{
    if ($this->form == null) {
        $this->form = new formControl();
        $this->form->setId($this->id);
    }

    return $this->form;
}

public function render()
{
    $form = $this->getComponent();

    if ($form->view == 'view_1') {
        $this->width = 80;
    } else {
        $this->width = 30;
    }

    parent::render();
}

Diky!

Editoval MartyIX (26. 3. 2011 8:22)

arron
Člen | 464
+
0
-

Jestli to funguje super…jenom jsem stale nepochopil, v jakem se pohybujes kontextu, cili co je ona ParentClass. Je to presenter nebo jina komponenta? Prepisovat metodu getComponent je totiz dost divne, kdyz pominu, ze ji ve frameworku oznacena jako final.

MartyIX
Člen | 217
+
0
-

@arron: ParentClass je jina komponenta a getComponent je jen shoda jmen, je to ma funkce.