Udał mi się ten kręcioł (albo, jak kto woli, loader). Rada bym go pokazać każdemu. Taki jest ładny! ;) Ale ponieważ moja aplikacja póki co działa jedynie lokalnie na moim komputerze, pokażę nie jego samego, a kod css. Posiłkowałam się rozwiązaniami stąd: https://stephanwagner.me/only-css-loading-spinner, przerabiając je nieco na swoją modłę:
Gdyby ktoś był zdeterminowany, może postawić BUKĘ lokalnie u siebie - tutaj info, jak to zrobić.
A teraz wspomniane pytania/wyzwania:
- jak wymusić na przeglądarce zdjęcie spinnera przed wyświetleniem alertu (który jest – jak się wczoraj dowiedziałam – funkcją blokującą)
- jak ominąć pokazanie spinnera przy 'skeszowanej' promisie?
Ad 1.
Spinner przy akcji usuwania książki - co do zasady - miał działać tak:
- kliknięcie w button "Delete"
- wyświetlenie powiadomienia typu confirm: BUKA SAYS: This book will be deleted. Are you sure?
- w przypadku potwierdzenia:
- dodanie klasy spinner
- wykonanie ajaxa
- zdjęcie klasy spinner
- wyświetlenie alertu: BUKA SAYS: The book number {number} was deleted.
W kodzie wygląda to tak:
Funkcje addSpinner i removeSpinner to nic innego jak jQuery'owe dodanie i usunięcie klasy:
W rzeczywistości dwie ostatnie akcje (zdjęcie klasy spinner i wyświetlenie alertu) odbywają się w odwrotnej kolejności. Próba obejścia problemu poprzez rozbicie jednej promisy na dwie zakończyła się niepowodzeniem:
Ad 2.
'Keszowania' (ang. cache) używam przy pobieraniu i wyświetlaniu listy rodzajów i gatunków literackich (ang. forms i genres).
Przy pierwszym wyświetleniu takiej listy spinner działa "normalnie", bo zasób pobierany jest z api. Przy drugim i każdym kolejnym spinner pojawia się dosłownie na mgnienie oka, bo 'skeszowany' zasób jest już w pamięci podręcznej przeglądarki.
Niby nie jest to wielkim problemem, ale trochę przeszkadza z perspektywy użytkownika. Nietrudno wyobrazić mi sobie sytuację, w której "biznes" upiera się, aby to zlikwidować. Tylko... jak?
Jak na razie pomysłów na rozwiązanie tych dwóch kwestii brak. Ktoś, coś?
Sugestie (więcej niż) mile widziane. :)
Brak komentarzy:
Prześlij komentarz