Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> getJson i zasięg zmiennej
MarcinTryka
post 19.09.2010, 00:43:15
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 31.03.2007

Ostrzeżenie: (0%)
-----


Od razu przejdę do kodu który wydaje mi się oczywisty:
  1. function klasa(){
  2. this.licznik=0;
  3. this.uruchom=function(){
  4. $.getJSON('url do jsona', function(json){
  5. //jakaś akcja
  6. this.licznik=1;
  7. });
  8. }
  9. this.getLicznik=function(){
  10. return this.licznik;
  11. }
  12. }
  13.  
  14. var objekt=new klasa();
  15. console.log(objekt.getLicznik()); //zwraca 0
  16. objekt.uruchom();
  17. console.log(objekt.getLicznik()); //zwraca 0


W jaki sposób mam zmienic wartosc "licznik:" ? Korzystam z jQuery czy powninienem użyć tego frameworka w jakiś konkretny sposób tworząc klasy?

Ten post edytował MarcinTryka 19.09.2010, 00:44:18
Go to the top of the page
+Quote Post
everth
post 19.09.2010, 00:55:12
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Używanie this jest trochę niebezpieczne bo jego zawartość zawsze odnosi się do aktualnego obiektu - co później może prowadzić do błędów takich jak u ciebie. Ja radzę sobie w taki sposób że tworzę nową zmienną zawierającą referencję do aktualnego obiektu. Czyli u ciebie wyglądałoby to tak:
[JAVASCRIPT] pobierz, plaintext
  1. function klasa(){
  2. var thisObj = this; //nowa referencja
  3. this.licznik=0;
  4. this.uruchom=function(){
  5. $.getJSON('url do jsona', function(json){
  6. //jakaś akcja
  7. thisObj.licznik=1; //tutaj odwołujemy się do właściwego obiektu - inaczej odwołalibyśmy się do callbacka
  8. });
  9. }
  10. this.getLicznik=function(){
  11. return this.licznik;
  12. }
  13. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował everth 19.09.2010, 00:55:31


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
MarcinTryka
post 22.09.2010, 22:25:47
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 31.03.2007

Ostrzeżenie: (0%)
-----


Przerobilem swoj skrypt na Twoj sposob. Najpierw zadzialalo smile.gif Po dalszych przeróbkach przestało działać. Próbowałem debugować i jak robiłem firebugiem "stop" to efekt byl taki jakby zmienna zostawala przekazywana. Jak nie stopowalem skryptu to nie.

Problem rozwiązałem - wynikał z tego że skrypt nie czeka aż wykona się funkcja z getJson - po prostu dalsza czesc skryptu korzystała z obiektu zanim własnosc zostala ustawiona smile.gif Dzieki za wskazowki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 15:20