Fylling Skrevet 31. august 2013 Del Skrevet 31. august 2013 (endret) 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 31. august 2013 av Fylling Lenke til kommentar
Sjuki Skrevet 31. august 2013 Del Skrevet 31. august 2013 (endret) 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 31. august 2013 av Sjuki Lenke til kommentar
Fylling Skrevet 31. august 2013 Forfatter Del Skrevet 31. august 2013 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
Sjuki Skrevet 31. august 2013 Del Skrevet 31. august 2013 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; }; 1 Lenke til kommentar
Fylling Skrevet 1. september 2013 Forfatter Del Skrevet 1. september 2013 (endret) så du trenger ikkje å sende "data" til setContent funksjonen? Gløym det, eg var trøtt -_- Men taker det fungerte fint, og eg husker dette til ein annen gang nå! Endret 1. september 2013 av Fylling Lenke til kommentar
Sjuki Skrevet 1. september 2013 Del Skrevet 1. september 2013 (endret) 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 1. september 2013 av Sjuki Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå