Nefunčkní FlashMessages v komponentě

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

Dobrý den,

už přes den tady řeším problém s vykreslováním flashMessages, bohužel sem ale k řešení nedospěl. Napsal jsem si komponentu na vykreslování formulářů do modálního okna. Tedy vyvolám přes handler akci a komponenta se překleslí a vyskočí modální okno s formulářem.

To vše funguje skvěle, ale když dojde na flashMessage, vykreslí se pouze v @layoutu stránky, nikoliv v šabloně komponenty. Samozřejmě posílání formuláře jde přes ajax, proto je mi divné že se nevykreslí zprávy i když se invaliduje celek s modálním oknem.

default.latte

<div id="modalbox" class="reveal-modal {$size}">

    {snippet modal}

    {if $toggle}
        <h3>{!$title}</h3>
        <hr>
        {snippet flashes}
        {foreach $flashes as $f}
            <div data-alert class="alert-box radius {$f->type}">
                {$f->message}
                <a href="#" class="close">&times;</a>
            </div>
        {/foreach}
        {/snippet}
        {$content}
        {if $form}
            {control form}
        {/if}
        <a class="close-reveal-modal">&#215;</a>

        <script type="text/javascript">
            var modal = $('#modalbox');

            if(!modal.is(':visible'))
            {
                modal.foundation('reveal', 'open');
            }

        </script>
    {/if}

    {/snippet}
</div>

Zdroj komponenty: https://gist.github.com/…mous/5172274

Díky, za rady!

Michal Vyšinský
Člen | 608
+
0
-

V tom gistu nevidím, kde voláš tu flash message. Ale typuji, že voláš flash message presenteru:

$this->presenter->flashMessage();

Pokud chceš, aby se ti zobrazovali v šabloně komponenty, tak musíš volat takto:

$this->flashMessage();
Fico
Člen | 8
+
0
-

No takhle, ten formulář má onSuccess callback, který vede do presenteru, tudíž ty flashMessages jdou z klasického presenter → $this->flashMessage(‚zprava‘), ale to se nedostane do komponenty.

Díky za odpověď!

xlilien
Člen | 27
+
0
-

Ahoj, bohužel taky nevím. Já to řeším tak, že pokud chci posílat flashe z komponenty, tak je posílám z komponenty…

Majkl578
Moderator | 1364
+
0
-

Pakliže to chápu správně, chceš z presenteru vyvolat flash message zprávičku na komponentě. To by se dalo takto:

$this['komponenta']->flashMessage('blabla');
Fico
Člen | 8
+
0
-

Majkl578: Přesně tak jsem to nakonec udělal, díky.