Nevygenerování grafu po redrawControl();

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

Ahoj,
vytvářím komponentu pro vykreslování různých grafů a chtěl jsem mít možnost přepínat mezi ruznými typy grafů, a tak jsem si v komponentě vytvořil další komponentu, která volá handler s mateřské komponenty ve kterém mění parametr typu grafu a překresluje ji, nicméně po kliknutí na button, který by měl změnit ten typ, se graf znovu nevykreslí. V html jsou všechna data změněna, včetně js kódu, v konzoli nemám žádný error a když si otevřu URL, která se volá ajaxem, graf vidím vykreslený správně (změněn jeho typ), nejsem v javascriptu tak zběhlý a tak si teď už nevím rady kde dělám chybu…

Díky za jakoukoli radu ;)

Template mateřské komponenty:

{snippet chart}
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    function drawChart() {
        $.get({link loadData!}, function (results) {
			...získání dat pro graf a další...
            $('#spinner-{$randomId|noescape}').hide();
            chart.draw(data, options);
        });
    }
    google.load('visualization', '1', {
        packages: ['corechart']
    });
    google.setOnLoadCallback(drawChart);
</script>
<div class="panel panel-default">
    <div class="panel-heading"><strong>{$panelTitle}</strong></div>
    <div class="panel-body" style="position: relative;">
        {control changeChartType}
        <div id="chart-{$randomId}" style="width: 100%; min-height: 400px;"></div>
        <div style="position: absolute; top: 45%; left: 49%" id="spinner-{$randomId}" ><i class="fa fa-5x fa-cog fa-spin"></i></div>
    </div>
</div>
{/snippet}

Handler v komponentě

public function handleChangeChartType($type){
        $parent = $this->getParent();
        $parent->setDefaultChartType($type);
        $parent->redrawControl('chart');
    }

Nechci tady dávat všechny zdrojáky, aby ten příspěvek nebyl moc dlouhý, kdyby někdo tušil v čem je zakopaný pes, tak pošlu další, vůbec nevím kde by mohl být problém, tak sem tu dal zatím jen tyhle dva které jsou podle mě nejdúležitější :D

Aurielle
Člen | 1281
+
0
-

Řekl bych, že event onLoad v javascriptu se volá jen po prvotním načtení stránky a ne po tvém načtení nového grafu AJAXem. Nejspíš musíš do snippetu přidat explicitní kód, který zajistí vykreslení grafu.

wassy
Člen | 46
+
0
-

@Aurielle a nemáš nějaký nápad jak na ten explicitní kód? Snažím se googlit sebevíce, ale nikde jsem nenašel řešení toho problému.. :(

akadlec
Člen | 1326
+
0
-

Jednoduše si budeš muset do success eventu toho ajax callu přidat initializaci nového grafu z nových hodnot, tam nění nad čím přemýšlet.