Volání handle v komponentě nepřekreslí snippet

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

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
+
0
-

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
+
0
-

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

David Matějka
Moderator | 6445
+
0
-

A mas nainstalovany nette.ajax.js ?

house23
Člen | 17
+
0
-

Jo ajax mi funguje, mám na té samé stránce závislý select nebo ajaxové odesíláni formuláře..

David Matějka
Moderator | 6445
+
0
-

ale nikde nevidim, ze bys tam mel tridu „ajax“ u tech odkazu

house23
Člen | 17
+
0
-

Bylo to tím! Díky moc :) Pro invalidaci komponenty z presentru používám

$this['searchMemory']->invalidateControl('searchMemory');

Není to prasárna?