AJAX – zpět a vpřed, #
- Ondřej Mirtes
- Člen | 1536
Ahoj,
David ve své přednášce na WebExpu zmínil, že práce s řetězcem za #
v adrese a možnost pohybu mezi jednotlivými stavy pomocí zpět/vpřed
tlačítka v prohlížeči patří mezi stěžejní vlastnosti RIA
aplikací.
Ale v Nette to nijak implementováno není. A bylo by fajn to mít.
Není mi jasné, zda-li prohlížeče fungují tak, že stačí měnit tvar adresy v adresním řádku a sami si zapamatují obsahy snippetů v jednotlivých stavech, nebo zda-li je potřeba navázat nějaké události na stisky těchto tlačítek a v Javascriptu si jednotlivé podoby snippetů ukládat ručně.
Bylo by fajn nějak upravit jquery.nette.js, aby toto umožňoval. Konkrétně jde o toto:
- Vytvořit nějakou hezkou podobu tvaru adresy za # a měnit ji při AJAXovém kliku.
- Měnit obsah na předešlé stavy při klikání na „zpět“ a „vpřed“ v prohlížeči.
- Zrušit všechny stavy ve „vpřed“, pokud uživatel párkrát (minimálně jednou) klikne na zpět a pak spustí nějakou novou AJAX akci.
- Načtení konkrétního stavu stránky, pokud uživatel přejde na odkaz již s # částí. Toto ale nejde vždy, např. u AJAXové akce bez parametru, kde třeba odesílám snippet s nějakým náhodným obsahem. Toto nejde zajistit bez Javascriptu, protože část za # se vůbec na server neodesílá.
- Honza Marek
- Člen | 1664
Nette v návratovém jsonu vrací state. Bývají v tom určitě persistentní parametry, možná všechny. To by na to snad šlo využít.
- vlki
- Člen | 218
Tak s tím už jsem si hrál. Přesně tak jak říká Honza, ve state se
posílají persistentní parametry.
V praxi tady (nepoužívá se tam přímo state, ale ten stav si konstruuju
sám v presenteru): http://www.iva-vadovic.info/galerie
Když se na to tak dívám, tak mi nefunguje reakce na zpět a dopředu. Dá se jejich stisknutí vůbec pomocí JS odchytit?
- Zrušit všechny stavy ve „vpřed“, pokud uživatel párkrát (minimálně jednou) klikne na zpět a pak spustí nějakou novou AJAX akci.
Toto se děje automaticky při změně stavu (hashe za #). Teda minimálně ve FF :)
- Načtení konkrétního stavu stránky, pokud uživatel přejde na odkaz již s # částí. Toto ale nejde vždy, např. u AJAXové akce bez parametru, kde třeba odesílám snippet s nějakým náhodným obsahem. Toto nejde zajistit bez Javascriptu, protože část za # se vůbec na server neodesílá.
Osobně moc nechápu, jak to myslíš.
- i.magine
- Člen | 81
- Načtení konkrétního stavu stránky, pokud uživatel přejde na odkaz již s # částí. Toto ale nejde vždy, např. u AJAXové akce bez parametru, kde třeba odesílám snippet s nějakým náhodným obsahem. Toto nejde zajistit bez Javascriptu, protože část za # se vůbec na server neodesílá.
Osobně moc nechápu, jak to myslíš.
Pokud to chápu dobře, tak například pokud udělám vyhledávání přes ajax a přidám za url hledany vyraz tak když pak vlezu na stránku s tim vyrazem treba z odkazu aby mi to přes ajax našlo. Možná bych to někdy potřeboval, určitě by se hodila podpora ze strany nette.
- Ondřej Mirtes
- Člen | 1536
Ve state se přenáší asi jen persistentní parametry – nevím, k čemu bych je potřeboval, když už jsou v URL před # :)
Problém s nepřekreslováním mám taky, proto mě napadlo, že se to zajišťuje v Javascriptu nějak ručně – koukal jsem na kód jQuery History pluginu a je docela velkej, tak jsem si myslel, že je potřeba dělat hodně věcí „ručně“…
Jo, i.magine to řekl správně – jde o to, že po načtení stránky s # se pak pošle v nějakém document.ready() ještě jeden dotaz, aby se updatovaly snippety podle té # části…
- Vyki
- Člen | 388
Z hlediska JS problém není:
http://www.mikage.to/…history.html
http://plugins.jquery.com/project/history
Editoval Vyki (7. 1. 2010 0:04)