Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

objektno orjentisani JS i callback funkcije

[es] :: Javascript i AJAX :: objektno orjentisani JS i callback funkcije

[ Pregleda: 1909 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
213.137.102.*



+8 Profil

icon objektno orjentisani JS i callback funkcije12.03.2006. u 14:55 - pre 220 meseci
napisao sam JS klasu sa idejom da je ona povezana na jedan DIV i onda svakih n sekundi menja sadržaj tog diva u krug (korisno za prikazivanje tri po tri vesti, npr.). evo idejnog koda:
Code:

function Alternator(){
      var counter=0;
      var timeout=1000;
      var displayMax=3;
      var elementName = "all_news";
      var timer;
      var divs = new Array();
      this.addItem = addItem;
      this.alternate = alternate;
      this.pause = pause;
      this.go = go;
      
      function addItem(item){
        divs.push(item);
      }
      
      function alternate(){
        myEl=document.getElementById(elementName);
        myEl.innerHTML="";
        for(j=0;j<displayMax;j++) {
          if(divs[counter])
            myEl.innerHTML+=divs[counter];
          counter++;
          }
        if(counter>=divs.length)counter=0;
        timer=setTimeout("this.alternate()",timeout);
      }
      
      function go(){
        timer=setTimeout("this.alternate()",timeout);
      }
      
      function pause(){
        clearTimeout(timer);
      }
    }

problem je što ne radi setTimout, dobijam grešku "object doesn't support that property or method". jasno mi je da je greška u toj callback funkciji, da verovatno dolazi do gubljenja opsega promenljive pri pozivu. jedina situacija u kojoj je kod radio je ako se this zameni imenom objekta. npr ako u dokumentu stavim:
Code:

newsAlternator = new Alternator();

a problematični deo izmenim kao:
Code:

timer=setTimeout("newsAlternator.alternate()",timeout);

onda se DIV menja, ali ovo nema smisla, jer će svaka instanca klase pozivati metod alternate potpuno istog objekta...

pokušao sam da guglam, ali nisam našao ništa korisno. svi primeri na koje sam naleteo pozivaju setTimeout VAN objekta, a kod mene to ne bi imalo smisla.

inače, klasi naravno nedostaju metode za podešavanje osobina, ovo je samo ideja dok ne otklonim ovaj za mene najveći problem. a ako se neko pita zašto sebi "komplikujem" život, to je zbog toga što planiram da na stranici imam više nezavnisnih tih alternatora. čini mi se da je ovo u tom slučaju najjednostavniji način.

btw, evo i primera dokumenta:
Code:

<div id="all_news" style="height:114" onmouseover="newsAlternator.pause()" onmouseout="newsAlternator.go()">
</div>
<script>
newsAlternator = new Alternator();
newsAlternator.addItem('item 1');
newsAlternator.addItem('item 2');
newsAlternator.addItem('item 3');
newsAlternator.addItem('item ...');
newsAlternator.addItem('item n');
newsAlternator.alternate();
</script>
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: objektno orjentisani JS i callback funkcije12.03.2006. u 18:50 - pre 220 meseci
Dodaj u klasu npr:
Code:

var alter = this;


a problematičan deo promeni u:
Code:

timer=setTimeout(alter.alternate,timeout);

Banned - Not available
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
213.137.102.*



+8 Profil

icon Re: objektno orjentisani JS i callback funkcije12.03.2006. u 19:01 - pre 220 meseci
dakle, svaka instanca klase treba da sadrži referencu na samu sebe?
 
Odgovor na temu

[es] :: Javascript i AJAX :: objektno orjentisani JS i callback funkcije

[ Pregleda: 1909 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.