Problem s perzistentnym parametrom v komponente

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

Zdravim,

mam takyto problem s perzistentnymi parametrami v komponente, vsetko je v cistom projekte v sandboxe. Mam jednoduchu sablonu s jednym komponentom, ktory ma 1 perzistentny parameter count. Ten sa da zvysovat pomocou linky (signalu) v komponente o 1 alebo linkou v presenteri sa da nastavit na 5. Ale problem mam ten, ze ked ho nastavim na 5 a potom zvysujem o 1, tak znova zacina od 0 a nie od 5. Kde mam, prosim vas, chybu alebo ako docielim funkcionalitu, ktoru pozadujem ?

Nette je 2.0-dev released on 2011–07–13PHP 5.3

Dakujem vopred :)

EDIT // ak tam handle signalu do komponenty a linku zmenim na

<a class="ajax" n:href="test:setCount! 5">nastav na 5</a>

tak to funguje, ale ju som sa niekde docital, ze volat handle v komponente z presenteru by sa nemalo.. a keby som potreboval zmenit 2 komponenty naraz, tak neviem, ako na to :(
HomepagePresenter.php

class HomepagePresenter extends BasePresenter
{
	private $testCount = NULL;

	public function handleSetCount($count)
	{
		$this->testCount = $count;
		$this->invalidateControl('test');
	}

	protected function createComponentTest()
	{
		$testControl = new testControl();

		if (!is_null($this->testCount))
		{
			$testControl->setCount($this->testCount);
		}

		return $testControl;
	}
}

default.latte

{block #content}

<a class="ajax" n:href="setCount! 5">nastav na 5</a>

<div n:snippet="test">{control test}</div>

testControl.php

class testControl extends Nette\Application\UI\Control
{
	/** @persistent int */
	public $count = 0;

	public function render()
	{
		$template = $this->template;
		$template->setFile(dirname(__FILE__) . '/' . __CLASS__ . '.latte');
		$template->count = $this->count;

		$template->render();
	}

	public function setCount($setCount)
	{
		$this->count = $setCount;
	}

	public function handleIncrease()
	{
		$this->count++;
		$this->presenter->invalidateControl('test');
	}
}

testControl.latte

aktualne cislo je: {$count}

<a class="ajax" n:href="increase!">zvys o jednotku</a>

Editoval boob (25. 8. 2011 9:15)

bojovyletoun
Člen | 667
+
0
-

je tam guláš v těch proměnných – máš tam proměnou testcount presenteru a count v komponentě- , což jsi asi nezamýšlel, ale je to nějaký hack.
smaž tedy proměnnou z presenteru– ta nedává smysl a předělej to Ta injektáž globální proměné do komponenty je fujík. odkaz můžeš vložit do šablony.

Vytvoř si tak, aby ti fungovaly 2 nezávislé komponenty na sobě.
PS ještě nápověda ja udělat odkaz na komponentu z šablony presenteru {$presenter['prvniKomponenta']->link('increase!')}(pro procvičení), jinak v šabloně komponenty použiješ jednoduše {link increase!} což odpovídá {$control->link(‚increase!‘)}. Info : {$control} je vždy aktuální komponenta – což může být i presenter, {$presenter} vždy presenter.
Za další na stránce asi používáš ajax(?). problém bude asi tom, že odkaz by se měl také obnovovat – i právě odkazy uchovávají stav stránky – pokud ale jiný odkaz provede změnu parametrů, tak se to do toho odkazu nepromítne.

Potom taky zkus experemintovat s použitím anotace /**@persistent*/ – kdy je a kdy nebude zbytečná.

taky by tě mohlo zajímat toto

Editoval bojovyletoun (19. 9. 2011 23:01)