invalidateControl()
- i.magine
- Člen | 81
Už jsem na to poukazoval v jednom tématu. Celou věc jsem přesunul do nového projektu, je tam jenom skeleton a defaultPresenter s šablonou. V presenteru mám:
Class DefaultPresenter extends Presenter{
public $textChange="Původní";
public function renderDefault(){
$this->setLayout(FALSE);
$this->template->textChange=$this->textChange;
$this->template->textStatic="Původní";
}
public function templatePrepareFilters($template){
$template->registerFilter(new CurlyBracketsFilter);
}
public function handleChange(){
$this->textChange="Změněno";
$this->invalidateControl("textChange");
}
}
a v šabloně:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<script src='{$baseUri}js/jquery.js' type="text/javascript"></script>
<script src='{$baseUri}js/jquery.nette.js' type="text/javascript"></script>
<title></title>
</head>
<body>
<b>Má se poslat po kliknutí na odkaz:</b>
{snippet textChange}
{$textChange}
{/snippet}
<b>Nemá se poslat když kliknu na odkaz:</b>
{snippet textStatic}
{$textStatic}
{/snippet}
<a href='{link change!}' class='ajax'>Změnit</a>
</body>
</html>
No a v čem je problém? Podle všeho co jsem si o tom přečetl by se po kliknutí měl poslat jenom ten snippet, který byl invalidován. Jenomže když kouknu do FireBugu odesílají se oba:
{"state":[],"snippets":{"snippet--textChange":" Zm\u011bn\u011bno\r\n","snippet--textStatic":" P\u016fvodn\u00ed\r\n"}}
A navíc, když zakomentuju invalidateControl(„textChange“) tak se taky pošlou. Něco jsem špatně pochopil, nebo se tady děje něco zvláštního? Díky za odpovědi.
Verze: Nette Framework 0.9.2 (revision b9fd602 released on 2009–11–12)
- i.magine
- Člen | 81
Tak znovu jsem se začetl do dokumentace a v https://doc.nette.org/…ication/ajax se píše :
Komponenta, která přijímá signál, je automaticky označena za invalidní.
Napřed jsem myslel, že se to týká jenom komponent, ale pak jsem si uvědomil, že párkrát jsem četl, že presenter se také označuje jako „zvláštní komponenta“. To tedy znamená, že když presenter přijme signál tak se úplně celý zinvaliduje a já s tím nic nenadělám? Chci říct, k čemu to je? Vždyť nic mi nebrání zavolat v handleru invalidateControl() tak nevím proč bych neměl být pánem toho co invaliduju.
Příklad z praxe:
Na jedné stránce mám chat a anketu. Chci aby oba jeli nezávisle na sobě, ale když v anketé kliknu na „hlasovat“ zavolá se signál addVote a celý presenter se zinvaliduje. Co s tím?
Díky