Avatar billede nanna31 Praktikant
15. januar 2006 - 12:06 Der er 8 kommentarer og
1 løsning

send variable fra Flash med sendAndLoad()

Følger ser ud til at virke fint, men jeg forstår faktisk ikke helt logikken i opstillingen. Er der en, der linie for linie kan forklare fænomenet lidt pædagogisk?....

on(release){
    myLoadVars = new LoadVars();
    myLoadVars.onLoad = function(success) {
          trace("success: "+success);
    }
    mySendVars = new LoadVars();
    mySendVars.fornavn=            input.fornavn;
    mySendVars.efternavn=            input.efternavn;
    mySendVars.telefon=            input.telefon;
    mySendVars.foedselsdato=        input.foedselsdato;
    mySendVars.sendAndLoad("add.asp", myLoadVars, "POST");
}
Avatar billede _k Nybegynder
15. januar 2006 - 13:21 #1
myLoadVars = new LoadVars();
- Laver et nyt objekt. Altså baseret på Flash "indbyggede" FlashVars klasse (hvilket er en masse kode vi ikke behøver vide noget om, men bare skal udnytte!)

myLoadVars.onLoad = function(success) {
  trace("success: "+success);
}
- LoadVars objektet har en metode der står og holder øje med om der er loadet noget ind i objektet. Er der det, råber den højt. Her tracer den. Det minder lidt om en postkasse der selv siger til når posten har været forbi og smide et brev i.

mySendVars = new LoadVars();
- Her laver du et nyt objekt. Det første blev lavet til at MODTAGE data (fordi det har en onLoad-metode). Det her vil du bruge til at sende med.

mySendVars.fornavn=            input.fornavn;
mySendVars.efternavn=            input.efternavn;
mySendVars.telefon=            input.telefon;
mySendVars.foedselsdato=        input.foedselsdato;
- Her smider du en masse variable ind i det objekt der skal sendes. Hvis vi sammenligner LoadVars objektet med en kuvert, er variablene de sider papir vi putter ind i kuverten inden den sendes.
Variablerne kommer fra et mc eller andet objekt som hedder "input"

mySendVars.sendAndLoad("add.asp", myLoadVars, "POST");
- Og her sker magien så. Du sender "brevet" til en asp-side som giver feedback. Måske smider den nogle variable ud alt efter om det er gået godt eller skidt (vil i hvert fald være bedst hvis den gør!).
Det du sender med er dit send objekt, og med sendAndLoad specificerer du at det er dit modtagerobjekt "brevet" skal havne i når det kommer tilbage. Fordi du har knyttet en masse variable til send objektet bliver de sendt med til asp-siden. "POST" betyder at disse variable sendes med via http-headeren på det du sender. Valgte du at bruge "GET" i stedet, ville variablene optræde i URL'en til den asp-side du sender til. Forskellen er, at POST kan indeholde MEGET mere end GET. GET er til gengæld nemmere at teste med fordi du kan se dine variable i URL'en.

...håber det var pædagogisk nok? Ellers spørg løs. Selv er jeg ikke helt sikker på at mange ord er bedre end få, men uha, man skal stramme sig an for at forklare noget halvteknisk med få ord - det burde jeg nok øve mig på ;)
Avatar billede nanna31 Praktikant
15. januar 2006 - 13:59 #2
Det var meget fint forklaret - jeg har lige et par uddybende spørgsmål...

Kan man ikke bare nøjes med myLoadVars-objektet til både at sende og modtage variable, eller det smartere at have to forskellige?

Jeg er ikke helt med på function-delen. Hvordan kan man sætte onLoad-metoden lig med en funktion? syntaksen forvirrer mig der. Hvor kommer variablen succes fra (bør den ikke oprettes et sted) og hvordan bliver den sat til true eller false?
Avatar billede _k Nybegynder
15. januar 2006 - 19:01 #3
Du kan sagtens bruge samme objekt til at sende og modtage med. Du skal bare kalde det i sendAndLoad. Årsagen til at man ikke altid vælger at modtage med samme objekt som man sender med, skyldes at kompleksitetniveauet dermed stiger udover de objektorienterede retningsregler. Dit eks. er relativt simpelt, men du kan sagtens komme i situationer hvor du bliver nødt til at lave alt for mange workarounds for at kunne bruge samme objekt. Og så er det jo rart at kunne anvende 2 i stedet.

Du skal mere tænke at du "overskriver" en metode end at du "sætter den lig med". Metoden eksisterer allerede i forvejen og bliver kaldt højere oppe i klassehierarkiet. Der sidder altså noget logik som siger at onLoad skal kaldes når der er hentet noget data.
Efter MX udgaven af Flash tillod man således at sætte funktioner lig med variable. Personligt er jeg heller ikke den store fan af det, da eksekveringsrækkefølgen ikke altid er lige gennemskuelig. Men som med så meget andet, er der tilfælde hvor det faktisk er ok - .LoadVars.onLoad (altså et funktionskal på et objekt) er en af dem. Kald til knapper og movieclips onPress-, onRollOver-metoder et andet.

Den før omtalte logik højere oppe kalder tilbage uanset hvad, men med et argument som du kender fra almindelige funktioner. Dette argument er om det er gået godt eller dårligt - true eller false.
Slår du dine objekter op i hjælpen, kan du altid se hvad de returnerer - hvis de da overhovet returnerer noget. Det er ofte ret værdifuld information ;o)
Avatar billede nanna31 Praktikant
15. januar 2006 - 23:06 #4
Betyder følgende, at functionen skal kaldes, når alle data er loaded? :

myLoadVars.onLoad = function(success) {
          trace("success: "+success);
    }
Avatar billede _k Nybegynder
16. januar 2006 - 08:27 #5
Yep, og er du i tvivl kan kaldet også oversættes til:

myLoadVars.onLoad = min_nye_smarte_funktion;

function min_nye_smarte_funktion(success) {
    trace("success: "+success);
    }
Avatar billede nanna31 Praktikant
19. februar 2006 - 15:52 #6
Tak for hjælpen k, vil du lige lægge et svar, så jeg kan lukket spørgsmålet?
Avatar billede _k Nybegynder
19. februar 2006 - 18:28 #7
Det vil jeg da gøre.
Avatar billede nanna31 Praktikant
19. februar 2006 - 19:32 #8
takker :)
Avatar billede _k Nybegynder
20. februar 2006 - 18:56 #9
Og det gør jeg også :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester