Signál na jiný presenter

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

Ahoj,
nevím, z jakého důvodu Nette neumožňuje zasílání signálu na jiný, než aktuální presenter, já na žádný nepřišel. Vždyť co je špatného na tom zobrazit odkaz na smazání položky z jiného, než aktuálního presenteru, nebo odkaz na nějak už seřazené položky, případně na jinou, než na první stránku nějakého výpisu?

Konkrétně to sám potřebuju z toho posledního důvodu. Když do šablony natvrdo napíšu {link Jiny:}?do=paginator-page&paginator-page=5, tak to funguje, tak nevím, proč by pro to neměla být podpora v Nette.

Je potřeba myslet na to, že nechci odkazovat třeba jen na signál presenteru, ale třeba i na signál jeho komponenty (např. datagridu nebo paginatoru).

Navrhovaná syntaxe:

{link Jiny:show!} //JinyPresenter::handleShow()
{link Jiny:paginator-show!} //JinyPresenter['paginator']->handleShow()

{link blabla:show!} //stejný presenter, action blabla, handleShow()
{link Jiny:blabla:show!} //JinyPresenter::handleShow() (a zároveň přechod na action blabla

Zkusil bych to napsat sám, ale metoda Presenter::createRequest je docela dlouhá a bojím se, že bych to rozbil :)

Editoval Ondřej Mirtes (25. 3. 2010 13:49)

_Martin_
Generous Backer | 679
+
0
-

Nemuze to byt tim, ze presentery by nemeli vedet o komponentach ostatnich presenteru?


Omlouvam se, ze pisu bez diakritiky, ale jedu na bete Opery pro Linux=D

Ondřej Mirtes
Člen | 1536
+
0
-

V tom případě by neměly vědět třeba ani o actionech ostatních presenterů a celé odkazování by nemohlo fungovat :o)

Prostě tahle věc JE potřeba – už kvůli tomu stránkování (mám seznam vláken fóra a u každého vlákna chci odkazovat na několik prvních a několik posledních stránek).

Honza Kuchař
Člen | 1662
+
0
-

Myslím, že šlo o to, že handler změní stav presenteru. A ty by jsi měl odkazovat už na ten změněný stav. Ale fakt je, že by to bylo praktické. To je ale blbost. Odkazuji už na změněný stav.

Editoval Honza Kuchař (18. 7. 2010 21:08)

norbe
Backer | 405
+
0
-

Taky už jsem něco podbnýho potřeboval, dočasně jsem to vyřešil vytvořením nové akce, které obstarala potřebná přesměrování. Ale řešení to není moc hezké a uvítal bych kdyby šlo na signály odkazovat přímo.

HonzaMac
Člen | 40
+
0
-

Také se přimlouvám. Už jenom kvůli zbytečnému opakování (DRY) :-)

Honza Kuchař
Člen | 1662
+
0
-

Ondřej Mirtes napsal(a):

Konkrétně to sám potřebuju z toho posledního důvodu. Když do šablony natvrdo napíšu {link Jiny:}?do=paginator-page&paginator-page=5, tak to funguje, tak nevím, proč by pro to neměla být podpora v Nette.

Myslím, že snad funguje předávání parametrů ne? :-) To handlePage se snad používá jen kvůli AJAXu, ne? tzn. {link Jiny: 'paginator-page' => 5} A už odkazuješ na stav. Ty vlastně chceš změnit stav Presenteru, který zatím žádný stav nemá, protože ještě neexistuje. :-)

Editoval Honza Kuchař (11. 5. 2010 17:00)

medhi
Generous Backer | 255
+
0
-

Také se přimlouvám pro podporu. V jednom presenteru mám přihlašování pomocí FB a nemůžu se na odkázat z jiných míst (logické je na to odkázat z přihlašovacího a registračního formuláře)

jantichy
Člen | 24
+
0
-

+1 pro podporu.

Majkl578
Moderator | 1364
+
0
-

 -1 pro podporu, signály slouží ke změně stavu aktuálního presenteru. Odkazování na jiné presentery řeší action.

Panda
Člen | 569
+
0
-

Ondřej Mirtes napsal(a):

V tom případě by neměly vědět třeba ani o actionech ostatních presenterů a celé odkazování by nemohlo fungovat :o)

Ono to není s těmi komponentami zas tak úplně jednoduché. Když chci zjistit, jestli má daný presenter nějakou action, tak si prostě vezmu reflection a kouknu, jestli má příslušné metody. To není problém, PHP mi jen bude muset načíst příslušnou třídu. Ale komponenta není jen nějaká metoda. Je to konkrétní instance třídy, která je vázaná na jinou konkrétní instanci třídy. A tu nemohu jen tak analyzovat přes reflection. Budu muset vytvořit instanci presenteru, nasimulovat stav, kdy presenter vytvoří danou komponentu (v klasických případech zavolat továrnu, v neklasických bude komponenta vytvářena dynamicky a já mám smůlu) a tu pak mohu zkoumat. To ale může způsobit nechtěné vedlejší efekty a bude to mít (ne)mírný overhead.

Jinými slovy – pokud by to šlo jednoduše a elegantně implementovat se vším všudy (tzn. plnohodnotné signálování do celé hierarchie komponent), tak za mě +1. Pokud ne, tak dávám –1.