Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PD extension nejsou správně zavolána při popstate #16

Open
zipper opened this issue Mar 8, 2019 · 4 comments
Open

PD extension nejsou správně zavolána při popstate #16

zipper opened this issue Mar 8, 2019 · 4 comments
Assignees
Labels

Comments

@zipper
Copy link
Contributor

zipper commented Mar 8, 2019

V popstate.nette callbacku chybí uvnitř state informace o pd extension, které byly pro request zapnuté. Proto při popstate jsou všechna pd extension vypnutá a neaplikují se, což může být teoreticky problém (mohou modifikovat URL přidáním parametru, atd.).

Řešením by mohlo být do stavu přidávat pole pd extension pro daný request. To se pravděpodobně neobejde bez modifikace samotného history.nette.ajax.js.

@zipper zipper added the bug label Mar 8, 2019
@zipper zipper self-assigned this Mar 8, 2019
@zipper
Copy link
Contributor Author

zipper commented Jun 17, 2020

Stejný problém je při použití forceReplace, například při donačítání dalších produktů. Při zmáčknutí tlačítka zpět se nenahradí obsah, ale pouze se připojí, protože forceReplace je vypnutý.

@zipper
Copy link
Contributor Author

zipper commented Jan 3, 2022

history.nette.ajax nově zachovává uvnitř state vlastní objekt, pouze jej rozšiřuje. Toto by teoreticky měla být prerekvizita k úkolu, viz poslední odstavec v zadání.

@sebastianvass
Copy link

@Qitek85 Narazil som na chybu viz link. Chyba nastáva v prípade že preklikávam medzi zafiltrovaniami a teda sa mi zduplikujú produkty vo výpise.

2022-01-13.at.12-27-13.mp4

@zipper
Copy link
Contributor Author

zipper commented Jan 14, 2022

Toto podle mě není řešitelné na úrovni pd.ajaxu, protože pokud použiji nějaké pd extension při kliku na odkaz, neznamená to imho automaticky, že to stejné extension by mělo být použito při kliku zpět. Nejde o symetrickou relaci, protože to, co ta extension dělá, není nutně reverzibilní provedením extension podruhé.

Druhý problém je vůbec se zjišťováním, které extension použít, protože pokud jdu zpět, mám informaci o stavu, do kterého jdu, ale ne o stavu ze kterého jdu. Přitom právě do stavu ze kterého jdu si můžeme ukládat informaci o použitých extension. Ale to pak nejsme schopni vytáhnout po přechodu. Toto by technicky bylo řešitelné jen velmi obtížně například modifikací stavu historie ještě před vykonáním toho requestu. To by ale mohlo mít kdo ví jaké vedlejší účinky.

Problém hlášený @sebastianvass nakonec vyřešíme jinak. Místo forceReplace extension, které vynutí přepsání i pro snippet s data-ajax-append, vytvoříme možnost nastavit append do snippetu per request. Tato informace bude uložena na ajaxifikovaném elementu (např. <a>). O něm sice také nic nevíme při přechodu zpět, ale to nevadí tolik, protože místo duplikování obsahu jen dostaneme obsah přesně odpovídající url. Např. při donačítání produktů stránkováním: Pokud načtu stránku 1, donačtu 2 a donačtu 3, vidím zároveň stránky 1, 2 i 3. Při kliku zpět v prohlížeči nebude fungovat append, ale snippet se mi překreslí pouze na obsah stránky 2. Nevidím tak sice stránky 1, ale vidím stránku 2 odpovídající URL. Další klik na zpět mi načte stránku 1.

Toto issue tedy pravděpodobně časem uzavřu, protože technicky nevidím smysluplné řešení.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants