Ajaxové hlášky
- jtousek
- Člen | 951
Zdravím,
s Nette začínám a potřeboval bych poradit ohledně AJAXu. Uživatel na něco klikne, čímž vyvolá nějakou akci – zavolá se příslušný Presenter->View. Při requestu nastala nějaká chyba (typicky uživatel není přihlášen). Přesměruju na autorizační Presenter, jehož cílem je vykreslit uživateli překryvnou vrstvu s přihlašovacím formulářem. Nějak nevím, jak přesně to udělat.
Napadlo mě mít {snippet #overlay} kde se budou zobrazovat chybové hlášky nebo právě přihlašovací form. Problém je, že pokud se nic špatného nestalo, nic uvnitř snippetu by se němělo zobrazit. Navíc by nemohl mít pevnou html šablonu – někdy je tam hláška o chybě, jindy potvrzovací dialog, jindy zase přihlašovací form atd.
Když to řeknu jinak, v případě, že nastane chyba potřebuji na konec html přidat html tý překryvný vrstvy (o překrytí se stará CSS). Jenže potřebuju vrátit různé html v závislosti na chybě a to jen tehdy když nastala.
Vlastně mám dojem, že snippet asi na tohle není to pravé, nebo by jich mělo být více, nebo nevím… Jak tuhle situaci v Nette řešit?
Celkově jsem z toho všeho už dost zmatenej – doufám, že jsem to alespoň napsal srozumitelně.
Díky za jakékoli nápady.
- jtousek
- Člen | 951
Vidím problém v tom, že když pošlu požadavek, nevím co dostanu zpátky – obvykle úspěch a něco se někde vypíše. Když ale nastane chyba potřebuju jen příslušně upravit ten snippet #overlay. Jenže nevím, jak mít v tom snippetu různý html pro různý případy. Mám dojem, že mi uniká nějakej základní princip – můžu mít stejnej snippet v několika šablonách s různym html uvnitř?
- jtousek
- Člen | 951
Zkusím se vyjádřit úplně jinak…
Uživatel přijde, server mu vrátí základní layout aplikace. Poté, cokoli udělá už by mělo být bez reloadu stránky. Např.:
Uživatel klikne někem do nabídky, že chce výpis kategorií. ⇒ AJAX do div#content natáhne strom kategorií.
Uživatel klikne, že chce editovat kategorii. ⇒ do #content místo tabulky výpisu se natáhne formulář editace.
Uživatel klikne na něco dalšího, ale vypršela mu session s přihlášením. ⇒ Zobraz overlay s přihlašovacím formulářem, po té, co se uživatel přihlásí JS na straně klienta zopakuje předchozí dotaz.
Defacto potřebuji aby každá akce změnila měla za následek, že server vrátí nějakou strukturu, kde bude nové HTML pro jeden nebo více prvků (divů) na stránce, dále třeba Javascript, který se má po načtení provést, nový <title> stránky, pokud nastala chyba (např. vše se povedlo, ale je třeba zobrazit upozornění) tak proveď všechny změny divů a v překryvné vrstvě zobraz chybovou hlášku nebo třeba onen přihlašovací form. Nikdy předem nevím, které části stránky server vrátí jako změněné. Např. při stránkování zůstane vše kromě jedné tabulky.
Aby aplikace fungovala s vypnutým JS nepotřebuju, vlastně bude lepší když fungovat nebude. Není mi jasné, jestli na tohle mám používat snippety, nebo jestli snippety jsou určené pro něco jiného a tohle by se mělo řešit jinak.
Editoval jtousek (5. 12. 2009 7:44)
- bazo
- Člen | 620
jtousek napsal(a):
bazo:
v tom případě ale neni důvod mít to jako snippet, ne?
pointa bola v tom, ze sa tam nic neukazuje. naplni sa az ked ty chces. a snippet kvoli tomu, ze mozes potom pouzit napr https://componette.org/search/?… na zautomatizovanie toho prekreslenia
- Tomik
- Nette Evangelist | 485
Aha, tak asi takhle:
Klidně použij snippety. Bude mít několik základních snippetů: menu, content, login form, v každém z nich bude nějaká (vykreslitelná) komponenta.
A vždy při přepisování těchto komponent (tedy jejich překreslení) musíš invalidovat konkrétní snippet.
Dále je potřeba zajistit během renderu těch komponent, zda se opravdu mají, či nemají vykreslit. Např. pokud sessions nevypršela, zobrazím vše, krom login formu, naopak, pokud vypršela, zobrazím jen login form (ale invaliduju i content, do který pošlu „prázdno“, aby se překreslil původní obsah).
Zatím takovouhle funkčnost je možné udělat pomocí výchozího jQuery
Ajax Driveru (viz https://componette.org/search/?…).
Pokud bys chtěl měnit ten title, je nutné si takový titulek poslat v
payload
(hledej v dokumnetaci, či API), a pak si jej pomocí
vlastního Ajax driveru, který bude vycházet z toho výchozího vytáhnout a
přepsat jím titulek stránky.
Stačí takhle?
V případě, že by to nešlo, můžu ukázat v ponděli, jak na to, až se uvidíme.
- Tomik
- Nette Evangelist | 485
jtousek napsal(a):
Tomik:
Díky, něco zkusím, ale asi budu potřebovat v pondělí podrobněji. Třeba ten titulek – není možný mít samotnej titulek jako snippet? Že by ta komponenta pak dycky měnila jak snippet s titulkem tak snippet s obsahem? Nebo může každá komponenta překreslovat jen jeden?
Teoreticky to možné je, ale pak by se musel trošku pozměnit způsob vykreslování snippetů pomocí jQuery. V pondělí se mi připomeň.