Gå til innhold

vansker med funksjon inni javaskript metode


Anbefalte innlegg

Hei.

 

Eg har eit lite problem her, som fårekommer når eg må bruke ein funksjon inni ein method og hente ut data'en som opprettes inni.

LoadContent.prototype.getContent = function () {
    $.get(this.file, function (data) {
        LoadContent.setContent(data);
    });
    return false;
};

LoadContent.prototype.setContent = function (data) {
    this.content = data;

    document.getElementById(this.id).innerHTML = this.content;
    return false;
};

Nokon som kan hjelpe meg?

Endret av Fylling
Lenke til kommentar
Videoannonse
Annonse

Problemet ditt er at du lager en ny funksjon hvor du deretter skal kalle LoadConent.setContent(data) inni. Problemet med det er at javascript mister helt begrepet om hva som er this i dette tilfellet. Det vil si du mister konteksten for hvor du finner LoadContent

 

Du kan løse det med jquery proxy,(http://api.jquery.com/jQuery.proxy/ )eller du kan antageligvis skrive

$.get(this.file, this.setContent);

this.setContent vil referer til en funksjon i LoadContent gitt at du har

var LoadContent = function(){.....}

Tror det skal gjøre seg, men gir ingen garanti på det skal virke 100% i så fall les om callback funksjoner og this.

http://stackoverflow.com/questions/183214/javascript-callback-scope

 

Kan legge til at jeg ikke har brukt jQuery eller javascript så mye

Endret av Sjuki
Lenke til kommentar

Problemet ditt er at du lager en ny funksjon hvor du deretter skal kalle LoadConent.setContent(data) inni. Problemet med det er at javascript mister helt begrepet om hva som er this i dette tilfellet. Det vil si du mister konteksten for hvor du finner LoadContent

 

Du kan løse det med jquery proxy,(http://api.jquery.com/jQuery.proxy/ )eller du kan antageligvis skrive

$.get(this.file, this.setContent);

this.setContent vil referer til en funksjon i LoadContent gitt at du har

var LoadContent = function(){.....}

Tror det skal gjøre seg, men gir ingen garanti på det skal virke 100% i så fall les om callback funksjoner og this.

http://stackoverflow.com/questions/183214/javascript-callback-scope

 

Kan legge til at jeg ikke har brukt jQuery eller javascript så mye

 

Nope, var dette eg gjor først. og da stod data som undefined.

Lenke til kommentar

Dette funker i alle fall hos meg når jeg kaller LoadContent.prototype.getContent() utenom den delen som setter = this.content

var LoadContent = function(){}
LoadContent.prototype.getContent = function () {
    $.get(this.file, this.setContent);
    return false;
};

LoadContent.prototype.setContent = function (data) {
    console.log(data);
    this.content = data;

    document.getElementById(this.id).innerHTML = this.content;
    return false;
};
  • Liker 1
Lenke til kommentar

Nei, det trenger du ikke, og det skal du ikke i en callback. I en callback så skal du bare si hvilken funksjon som skal bli kalt når en $.get blir en sucess eller en fail.

 

Så hvorfor skal man bare referer til en funksjon og ikke kalle den i en callback? Det er rett og slett fordi $.get er et asynkront kall, det vil si når den får svaret fra serveren, da først skal den utføre arbeidet på resultatet Dette fører til at man kan gjøre andre ting i mens man venter på svaret fra serveren, men man kan ikke gjøre arbeid som er avhengig av resultatet fra serveren. Det er fordi man rett og slett ikke vet når svaret kommer tilbake fra $.get forespørselen!

 

Når man skriver

 

this.setContent

 

så kalles ikke funkjsonen. mens hvis man gjør dette

 

this.setContent({content:"hei"})

 

så kalles funksjonen.

 

Så hva vil du gjøre kalle funksjonen før du har fått svaret, eller sende funksjonen videre til jquery slik at den kan kalle funksjonen når man får svaret serveren?

LoadContent.prototype.getContent = function () {
    $.get(this.file, this.setContent);
    return false;
};

LoadContent.prototype.setContent = function (data) {
    console.log(data);
    this.content = data;

    document.getElementById(this.id).innerHTML = this.content;
    return false;
};

Er det samme som å skrive dette

LoadContent.prototype.getContent = function () {
    $.get(this.file, function (data) {
        this.content = data;
        document.getElementById(this.id).innerHTML = this.content;
        return false;
   });

};

Men anbefaler deg å lese om callbacks og asynkronekall. Sliter fortsatt selv en del med å vende meg vekk fra java/c++ tankegangen :)

Endret av Sjuki
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...