![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Na początku napiszę, że problem mam rozwiązany "na okrętkę", ale podam go na końcu... Szukam bowiem rozwiązania ładniejszego ;)
Mam sobie klasę w JS, gdzie w prototypie stworzyłem funkcję do dynamicznego dołączania pliku w strukturę DOM. Standardowe utworzenie elementu script z określonym src i type a całość po utworzeniu walę jako appendChild. Coś w stylu:
W dołączanym pliku mam zmienną
i wszystko fajnie, ale plik ten jest dołączany dosłownie na chwilkę. Dołączam (to działa na bank bo obejście działa), chcę przechwycić zmienną z wewnątrz i odłączyć plik. Dla dołączanego pliku zdefiniowałem sobie zdarzenie
Próbowałem wewnątrz przechwycić var zmienna i przekazać ją wyżej do skryptu i tu jest problem, bo zasięgi widoczności sa takie, iż samą zmienną widzę, dopóki operacje wykonuję wewnątrz funkcji anonimowej (sprawdzane console.log - działa, zmienna jest ok i widoczna na tym poziomie), ale nie mogę wrzucić parametru (onload jako parametr przyjmuje event i nic innego :/), nie mogę użyć self (to mi daje hook na obiekt window) ani this (to mi daje hak na utworzony obiekt script ), a próba wejścia tam na pałę z globalną zmienna tymczasową i do niej przypisanie zawartości zmiennej z pliku kończy się oczywiście przywróceniem wartości z kontekstu globalnego zaraz po wyjściu z funkcji anonimowej. Myślałem o jakimś return wewnątrz funkcji anonimowej, ale do czego by ta wartość się przypisała? file.onload ? To po powrocie też sprawdzę (bo nie zrobiłem tego jeszcze - była 2 w nocy i chciałem już iść w kimę :D ), ale może ktoś do tego czasu mi podrzuci pomysł/wskazówkę/rozwiązanie. Może za bardzo zamotałem sobie życie lub byłem już za bardzo padnięty i zwyczajnie nie zauważyłem jakiegoś banalnego rozwiązania. Zgodnie z adnotacją na początku: zrobiłem obejście (proste po uzupełnieniu klasy Storage o dwie metody, bo ta nie ma, według dokumentacji implementujących firm, możliwości przechowywania obiektów) z użyciem sessionStorage z html5, ale Storage i starsze IE (6, 7) to oczywiście "nieporozumienie". Po powrocie na chatę wrzucę kod tego co zrobiłem, by było widać gdzie konkretnie zmiany moim zdaniem należy przeprowadzić. EDIT: Dorzucam wspomniany kod :)
Powód edycji: [thek]: Fragment kodu odpowiedzialny za manipulację w DOM
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
pisałem do @kukix by wskazać błąd myślowy i ogólnie chciałem opisać którędy program podąży... przy programowaniu zdarzeniowym kod programu nie jest wykonywany w kolejności występowania kodu, rozgałęzienia następują prawie jak na if'ach (nie wiem do czego to przyrównać) na zdarzeniach...
ale jak tak dzisiaj na trzeźwo patrzę tylko na fragment kodu to u @kukix najprawdopodobniej jest problem ze zrozumieniem this w JS - w kodzie przypisuje this do that i potem nigdzie nie wykorzystuje, jeśli fragment kodu nie jest częścią metody to this będzie oznaczało window... potem jest użycie this w funkcji onload gdzie to this będzie znaczyło element drzewa DOM czyli to samo co zmienna file ps. nie wiem dlaczego, chyba dla tego, że jeśli czasami kod komuś poprawiałem to ze zmiennymi przy długich funkcjach jeśli chodzi o zasięg klamerkowy czasami różne rzeczy się dzieją np. nagle ktoś podstawi inny obiekt (chyba, że to było zamiarem) lub całkiem usunie referencję, to takie elementy obiektów gdzie chcę mieć pewność, iż nikt ich nie nadpisze jakoś wolę przekazywać przez argument do funkcji anonimowej w stylu:
podobnie można robić z innymi obiektami nie tylko this a jeśli gdzieś coś ma się zmieniać dynamicznie to np. przekazuję referencję do obiektu o jeden poziom wyżej i w kodzie funkcji anonimowej odwołuję się do zmiennych składowych danego obiektu... Ten post edytował zegarek84 19.04.2012, 10:10:10 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 05:24 |