Volání handle v komponentě nepřekreslí snippet
- house23
- Člen | 17
Ahoj všichni, mám vytvořenou komponentu, která obsahuje tagy. Každý tag má křížek kterým se maže. Mazáni funguje, problém je ale v překreslování. Voláni handle mi vždy překreslí celou stránku místo snippetů. Při mazáni se volá handle přímo v komponentě. Mám tam ještě funkci která přidává tagy a tam se invalidate volá z presenteru což funguje super.
Celá komponenta je ve zvláštním souboru, který je includovaný do @layout.latte
{snippetArea bottomPanel}
{include 'bottomPanel.latte'}
{/snippetArea}
V tom souboru bottomPanel.latte je tag pro komponentu uzavřený do snippetu
{snippet searchMemory}
{control searchMemory}
{/snippet}
Samotná komponenta má tuto šablonu:
{foreach $queries as $queryItem}
<button type="button" class="btn btn-info">{$queryItem->getCategoryTitle()} <a n:href="delete!, $queryItem->getCategoryID()"><span class="glyphicon glyphicon-remove"></span></a></button>
{/foreach}
Při přidávání tagů se invaliduje více věcí a volám je takto. První volám snippet arrea obalující include a pak snippet obalující control. Toto funguje v pohodě.
if($this->isAjax()){
$this->invalidateControl('productsContainer');
$this->invalidateControl('bottomPanel');
$this->invalidateControl('searchMemory');
}
Handle který by měl invalidovat tu komponentu a překresluje celou stránku vypadá takto
public function handleDelete($categoryID){
$this->searchMemory->deleteSearchItem($categoryID);
$this->invalidateControl('bottomPanel');
$this->invalidateControl('searchMemory');
}
- David Matějka
- Moderator | 6445
Ty mas totiz ty snippety v sablone presenteru, ale snazis se invalidovat
snippety komponenty. Pokud bys chtel invalidovat snippety presenteru, musel bys
v sablone napsat $this->presenter->invalidateControl(...)
..
v tvem pripade bude ale lepsi smazat ty snippety ze layoutu a z bottomPanel a
dat snippet do sablony komponenty a invalidovat ten
- house23
- Člen | 17
změnil jsem to na toto
{snippet searchMemory}
{foreach $queries as $queryItem}
<a n:href="setQuery!,$queryItem->getCategoryID()" class="btn btn-info">{$queryItem->getCategoryTitle()} <a n:href="delete!, $queryItem->getCategoryID()"><span class="glyphicon glyphicon-remove"></span></a></a>
{/foreach}
{/snippet}
public function handleDelete($categoryID){
$this->searchMemory->deleteSearchItem($categoryID);
$this->invalidateControl('searchMemory');
}
Pořád se po každém vyvolání handle přenačte celá stránka