ugrás a tartalomhoz

Osztály, jquery, this.

therest · 2012. Feb. 15. (Sze), 15.42
Sziasztok!

Van egy saját ajaxos libem, amiben megoldott, hogy a callback függvényben a this azt képviselje amire nekem szükségem van. Mivel azonban a jelenlegi projektemben elég sok területen jqueryre kényszerülök, ezért a saját libemet nem használnám, hiszen a jqueryben is van ajax támogatás.

var cTimeline=function(start, end) {
this.start=start;
this.end=end;
this.otherData='nem tudom elérni';
cTimeline.prototype.draw(events) {/* timline kirajzolása eseményekkel*/}
cTimeline.prototype.getDatas=function() {
var request = $.ajax({
url: 'getevents.php',
type: "post",
data: {'start' : this.start,'end' : this.end},
dataType: "xml",
success: this.draw
});
}
}
A fenti példa teljesen jól működik, ami a gond, hogy a callbackben (draw) nem tudom elérni az osztály "otherData" tulajdonságát.
Megoldható ez egyszerűen és szépen jqueryvel? Hogyan?
 
1

this

Poetro · 2012. Feb. 15. (Sze), 15.54
Ha olvastad a JavaScript függvényekről szóló cikkemet, akkor tudhatod, hogy a this jelentése attól függ, hogy milyen kontextusban lett meghívva a függvény. Mondjuk azt sem értem, miért szerepel a függvényeden belül a prototype deklaráció, és hogy miért hívják a függvényedet cTimeline-nak. Gondolom ez egy konstruktor függvény akar lenni, ekkor illik nagybetűvel kezdeni a nevét, hogy másik is tudják, hogy ez egy konstruktor, és ennek megfelelően használják. Ezen kívül nem hiszem, hogy létezik a cTimeline.prototype.draw függvény, és nem is tudom, miért akarod meghívni egy events paraméterrel. Valamint mit keres utána egy üres objektum?
cTimeline.prototype.draw(events) {/* timline kirajzolása eseményekkel*/}
sort a JavaScript körülbelül a következőképpen látja:
cTimeline.prototype.draw(events);
{/* timline kirajzolása eseményekkel*/};  
de egyébként valószínűleg hibát is fog dobni a fura szerkezet miatt. Nem lehet, hogy a következőt akartad írni?
cTimeline.prototype.draw = function (events){
  /* timline kirajzolása eseményekkel*/
};
Én inkább a következő formát ajánlanám:
var CTimeline = function(start, end) {
  this.start = start;
  this.end = end;
  this.otherData = 'nem tudom elérni';

};
CTimeline.prototype.draw = function(events) {
  /* timline kirajzolása eseményekkel*/
};
CTimeline.prototype.getDatas = function() {
  var request = $.ajax({
    url: 'getevents.php',
    type: "post",
    data: {
      'start': this.start,
      'end': this.end
    },
    dataType: "xml",
    success: this.draw,
    context: this
  });
};
2

Rengeteg hiba, elnézést,

therest · 2012. Feb. 15. (Sze), 17.50
Rengeteg hiba, elnézést, sebtében írtam át ide mert szaladnom kellett. Valóban minden úgy van az eredeti kódban ahogyan Te is írtad, leszámítva a context-et. :)
Köszi a context-es megoldást, minden szalad, ahogy kell!