Částečně perzistentní parametry komponent

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

Zdravím.

Potřeboval bych poradit s následujícím problémem:

  • Mám komponentu, která vypíše seznam (např. článků).
  • Tato komponenta má signál „detail“, který dostane jako parametr ID článku, a vykreslí namísto seznamu konkrétní článek.
  • Na komponentě s detailem je subkomponenta formulář (např. komentáře). Odešlu-li tento formulář, ztratím signál „detail“ na nadřazené komponentě a zobrazí se mi seznam.
  • Měl bych tedy zobrazení „detailu“ řídit nikoliv signálem, ale nějakým „obyčejným“ parametrem komponenty. Tento parametr by se měl dostat i do action zmíněného formuláře.
  • Jenže jediný způsob, jak ho tam umím dostat, je označit ho jako perzistentní, což ale způsobí, že se mi tento parametr dostane i do odkazů vně mojí komponenty se seznamem článků.

Potřeboval bych něco jako „částečně perzistentní parametr komponenty“, který by se zachovával v rámci odkazů vytvořených v komponentě nebo v jejích subkomponentách, ale ne nikde mimo. Tuší prosím někdo, jak toho docílit?

Díky moc.

Ot@s
Backer | 476
+
0
-

Detail určitě neřeš signálem. Zálěží na situaci, ale obecně to řeším vhodným nastavením rout (prostě počítám s tím, že v SEO URL se bude vyskytovat část „ukazující“ na detail nějakého objektu).
Každopádně použití persistence v komponentě je na místě. Ty místa, kde ti „nevhodně zasahuje“ do generování odkazů musíš ošetřit (vyresetovat pers.proměnnou do východí hodnoty, pak už „neprudí“).

class Article extends Control
{
    /** @persistent */
    public $id;
}

V šabloně detailu článku pak

<a n:href="this, id=>null">Zpět do výpisu článků</a>

Editoval Ot@s (11. 1. 2012 13:59)

bojovyletoun
Člen | 667
+
0
-

já si naopak myslím, že routy v tomhle nehrají roli. Jelikož komponenty umí jen signály a ne action, tak to řeší signálem. Zkus se podívat na lookout control