AJAX – zpět a vpřed, #

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

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
+
0
-

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
+
0
-

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
+
0
-
  • 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
+
0
-

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…

i.magine
Člen | 81
+
0
-

Možná by nebylo od věci se inspirovat facebookem, ten to dělá tak že přenáší za # část url kterou v normálním neajaxovým požadavku přenáší za / … proste za adresou.

Vyki
Člen | 388
+
0
-

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)