Signál na jiný presenter
- Ondřej Mirtes
- Člen | 1536
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)
- Ondřej Mirtes
- Člen | 1536
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
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)
- Honza Kuchař
- Člen | 1662
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)
- Panda
- Člen | 569
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.