Problem s perzistentnym parametrom v komponente
- boob
- Člen | 21
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–13 s PHP 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
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)