invaliadacia snippetu v inej komponente

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

Viete mi poradit?
mam:

komponeta A >> {snippet A}
	komponeta B >> {snippet B}
	komponeta C >> {snippet C}

ked som v A invalidujem:

$this->invalidateControl('A')
$this->invalidateControl('B')
$this->invalidateControl('C')

ked som v B invalidujem:

$this->getParent()->invalidateControl('A')
$this->invalidateControl('B')
C ??????????????????????????????

ako invalidovat C nejaky navrh???
dakujem

Ondřej Altman
Člen | 17
+
0
-

$this->getParent()->getComponent(‚C‘)->invalidateControl(‚C‘);

možná pujde i:

$this->getParent()[‚C‘]->invalidateControl(‚C‘);

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Třídy v Nette jsou posypané syntax cukříkem, takže by to šlo i hezky takto:

$this->parent['C']->invalidateControl('C');

Možná bude časem dobré se zamyslet, jestli by to nešlo více dekomponovat, respektive snížit závislosti. Aktuálně tvoje komponenta vyžaduje, aby byla připojena tak a tak, jinak zařve (v parentu bude něco jiného, komponenta C bude taky něco jiného…). Ideální je vyčlenit kód, kde se volají tyhle invalidateControl() třeba do nějakého callbacku o úroveň výš, který bude volán na principu události ($onOk a $component->onOk[] = callback(...).

duskohu
Člen | 778
+
0
-

no ono by to bolo fajn aby boli nezavisle,
len v tomto pripade neviem ci to pojde, kedze mam komponentu

  • tabulka
    • Filter
    • Strankovanie
    • Pocet zobraz. zaznamov
    • Zoradovnie
    • Detajl zaznamu z tabulky

a z toho mam jednu velku komponentu, takze zavislosti budu asi stale .. :-(