NIttro – Dynamic Remove volaný jako eventDispatcher

Damo
Člen | 54
+
0
-

Ahoj, řeším jednu věc, mám dvě komponenty, jedna vykresluje okna, druha jen jejich zkratky.

v Komponenta „okna“ mám u button close s attr data-dynamic-remove

<a n:href="close! $window->id" class="btn btn-close"
                        data-dynamic-remove="#{snippet.id x-window-$window->id}"
                        data-history="false"
                        data-scroll-to="false"
                    ></a>

kdyz kliknu, tak se mi odeberte jen ta jedná položka. Což funguje dobře.
Ale zároveň bych potřeboval odmazat i polozku zkratky. Na předání eventu používám

$this->eventDispatcher->dispatch(new XWindowDeletedEvent($deletedWindow));

event mi prijde do komponenty, ale tam jaksi uz nezafunguje aby mi komponenta odstranila jen tu jednu polozku, vždy překlesný celou komponentu.

Příchozí event si předám do methody zde

    public function refreshDeleted(XWindowDeletedEvent $data) : void {
        $this->getPresenter()->postGet('this');
        $this->redrawControl('dummy');
    }

kdy dám jen $this->redrawControl(''); tak se mi prekreslí celá komponenta

Tohle je v te komponentě

<div
        n:snippet="x-taskbar"
        n:dynamic="x-task-\d+"
        data-dynamic-element="a.x-task-item.nav-task.d-none.d-sm-inline-block"
        class="navbar-nav x-tasks-group nittro-snippet-container"
>
    {foreach $windows as $window}
        <a n:snippet="x-task-$window->id"
            class="x.task-item nav-task d-none d-sm-inline-block" href="#">
            <img src="image/module/mcdb.svg" class="avatar img-fluid rounded-circle me-1" alt="Dashboard">
        </a>
    {/foreach}
</div>

kam umístit toto, v komponentě okna to mám u close buttonu, ale tady fakt nevím co s tím, v teto komponnet není nic klikacího na její odstranění.

data-dynamic-remove="#{snippet.id x-task-$window->id}"

Díky za nějakou radu.

David Grudl
Nette Core | 8111
+
+2
-

Neporadím, jen chci říct, že je fajn, že nejsem jediný kdo na Štědrý večer programuje :)

Damo
Člen | 54
+
0
-

Trošku jsem postoupil, už to funguje, ale ještě to doladit.
Ono stačí k tomu close buttonu do attr data-dynamic-remove pridat dalsi selector
takže:

<a n:href="close! $window->id" class="btn btn-close"
                        data-dynamic-remove="#{snippet.id x-window-$window->id}, #snippet-xTaskBar-x-task-{$window->id}"
                        data-history="false"
                        data-scroll-to="false"
                    ></a>

ale nemůžu použít snippet.id pač tam vloží název snippetu, takže to musím napsat natvrdo.
Nevěděl by někdo jak se odkázat na dynamicky snippet.id jiného snippetu?
Snad to dobře popisuji :-)

Damo
Člen | 54
+
0
-

Takže to vypadá, že to nelze, ten překlad pracuje pouze z $this->control. Vyřešil jsem tak, že si tam to id elementu pošlu v proměnné z komponenty.