Avatar billede limes_planum Praktikant
10. maj 2007 - 22:30 Der er 14 kommentarer og
1 løsning

Længde på eval

Hvorfor kan jeg ikke det her?:

eval("var readXML"+i+" = new XML();readXML"+i+".ignoreWhite = true;readXML"+i+".load(xml_url);readXML"+i+".onLoad = function(success) {_root.node_var = readXML"+i+finex+".firstChild.nodeValue;_root.gd_n2_f134.txt.text = _root.node_var;");

Hælder til at der er en maxlængde på eval, eller at det er umuligt at eval'e ";"-linjeskift.
Avatar billede kragekjaer Praktikant
10. maj 2007 - 22:46 #1
gad vide hvad du har gang i...
Avatar billede docks Nybegynder
11. maj 2007 - 06:39 #2
ditto...du har variabler (som du deklarerer), functioner osv. inde i en eval function...prøv at forklare hvad du vil opnå så kan det være vi kan hjælpe
Avatar billede Slettet bruger
11. maj 2007 - 09:17 #3
Ja det ser helt f**ked ud!
Avatar billede limes_planum Praktikant
11. maj 2007 - 09:21 #4
Ok - var måske lidt hurtig i oprettelsen af dette spørgsmål.

Jeg vil gerne lave en evaluate på en 'hel funktion', der køres inde i en for-løkke. I flash' egen help-funktion har de dette eksempel på eval:

for (var i = 1; i <= 3; i++) {
setProperty(eval("square"+i+"_mc"), _rotation, 5);
}

- hvilket jo kun er en meget afgrænset kodestump/kodelængde; ("square"+i+"_mc")
Her er hele min oprindelige forløkke uden "_root.gd_n2_f134.txt.text"-fejlsøgningsændring:

_root.xml_url = "http://www.nba.com/aroundtheassociation/rss.xml";
_root.finex = ".firstChild.firstChild.firstChild";
for (f=1; f<=20; f++) {
    _root.i = 1;
    _root.finex = _root.finex+".nextSibling";
    eval("var readXML"+f+" = new XML();readXML"+f+".ignoreWhite = true;readXML"+f+".load(xml_url);readXML"+f+".onLoad = function(success) {_root.node_var = readXML"+f+finex+".firstChild.nodeValue;_root.kasse_n"+i+"_f"+f+".txt.text = _root.node_var;");
// For fejlsøgning traces node_var:
    trace(_root.node_var);
}
NB.: Har ændret i til f nogle steder - ikke vigtigt.

Denne her opbygning er også prøvet, hvor hver linje er 'evalueret' istedet:
eval("var readXML"+f+" = new XML();");
    eval("readXML"+f+".ignoreWhite = true;");
    eval("readXML"+f+".load(_root.xml_url);");
    eval("readXML"+f+".onLoad = function(success) {_root.node_var = readXML"+f+_root.finex+".firstChild.nodeValue;");
    eval("_root.kasse_n"+_root.i+"_f"+f+".txt.text = _root.node_var;");
    trace(_root.node_var);
}

Har en mistanke om at skulle bruge en form for ekstern .as-fil/class-opbygning for at kunne udføre det.
Avatar billede docks Nybegynder
11. maj 2007 - 09:48 #5
eval("square"+i+"_mc") - der laves en eval på et movieClip/object

men du prøver på at lave eval på XML, funktioner og det kan altså ikke.

Igen - det er nok bedre du forklarer hvad du gerne vil...for det kode du har skrevet vil aldrig komme til at virke...du har misforstået hvad eval() bruges til tror jeg...
Avatar billede mat Nybegynder
11. maj 2007 - 10:01 #6
Hvis du vil oprette en række XML objekter med et forskelligt integer-postfix, så brug arraynotation;

this["readXML"+f] = new XML();
this["readXML"+f].ignoreWhite = true;

osv osv

mvh mat
Avatar billede Slettet bruger
11. maj 2007 - 11:45 #7
docks > Kan du forklarer hvad eval(); gør sådan præcist, for jeg er også selv lidt i tvivl omkring, hvornår eval kan/skal bruges.
Avatar billede limes_planum Praktikant
11. maj 2007 - 19:29 #8
Personligt finder jeg det meget naturligt at jeg gir mig ud i et sådan
'vildt forsøg' med eval. Jeg har tit brugt funktionen og på 2-3 forskellige måder med stor succes.
For mig at se 'evaluerer' eval et stykke kode så det bliver afviklet internt i koden, før det bliver læst af hoved-fortolkeren. Det ser dog ud til at mat har en god/bedre forklaring.

Ja - det kan godt være det ser f**cked up ud, men der er god tanke bag. Alternativet for mig er nemlig at skrive 1200 forskellige readXML-funktioner. Rimelig øv - så derfor søger jeg selvfølgelig denne optimering/forkortelse af kode.

Ok mat - jeg har således udfærdiget denne kode:

_root.xml_url = "http://www.nba.com/aroundtheassociation/rss.xml";
_root.finex = ".firstChild.firstChild.firstChild";
for (f=1; f<=20; f++) {
    _root.i = 1;
    _root.node_var = "ert"; // til fejlsøgning!
    _root.finex = _root.finex+".nextSibling";
    //trace(_root.finex); // til fejlsøgning!
    this["var readXML"+f] = new XML();
    this["readXML"+f].ignoreWhite = true;
    this["readXML"+f].load(_root.xml_url);
    this["readXML"+f].onLoad = function(success) {
        _root.node_var = this["readXML"+f]+this[_root.finex].firstChild.nodeValue;
        this["_root.kasse_n"+_root.i+"_f"+f].txt.text = _root.node_var;
        trace(_root.node_var);
    };
}

- desværre ser det ud som om linjen;
this["readXML"+f].onLoad = function(success) {
- ikke bliver afviklet, da den underliggende: trace(_root.node_var); - ikke traces.
Avatar billede limes_planum Praktikant
16. maj 2007 - 10:41 #9
Ok - der er måske en begrænsning i sproget på dette område, og jeg har lige fået en ide til at løse det med php.
Avatar billede mat Nybegynder
16. maj 2007 - 10:52 #10
Inden du udråber det til en begrænsning i sproget skulle vi måske høre hvad det er du vil med dit rss feed?

i XML.onLoad refererer this eksempelvis ikke til det den gør uden for XML.onLoad (i AS 2)

Og fra hjælpen;

"Accesses variables, properties, objects, or movie clips by name. If expression is a variable or a property, the value of the variable or property is returned. If expression is an object or movie clip, a reference to the object or movie clip is returned. If the element named in expression cannot be found, undefined is returned."

Notér ordet; "Accesses"

mvh mat
Avatar billede mat Nybegynder
16. maj 2007 - 10:53 #11
(og "fra hjælpen" er hvis du slå op under "eval")
Avatar billede limes_planum Praktikant
21. maj 2007 - 12:58 #12
Mht. til min kommentar 16/05-2007 10:41:46, så blev jeg bare utålmodig og konkluderede at man ikke kunne hjælpe mig mere, og at der var en begrænsning i sproget. Det kunne være lækkert med en grafisk funktion i Flash, der viste fortolkerens gang, handling og position undervejs i et script.

Jeg tror ikke der er en begrænsning alligevel, da jeg har fået det til at virke rent output-mæssigt. Er dog stadig i tvivl om, hvorfor min kode ved: 11/05-2007 19:29:53 ikke virkede.
Det er historie nu, da dette kodeeksempel giver mig, hvad jeg ønskede (i hvert fald midleridigt):

var readXML = new XML();
readXML.ignoreWhite = true;
_root.xml_url = _root.inp_kil.text;
readXML.load(_root.xml_url);
readXML.onLoad = function(success) {
    _root.finex = ".firstChild.firstChild.firstChild.firstChild.childNodes";
    for (f=400; f<=500; f++) {
        duplicateMovieClip(_root.kasse5_n_f, "kasse5_n"+_root.i+"_f"+f, f);
        _root.i = 5;
        _root.fort = "readXML"+_root.finex+".firstChild.nodeValue";
        _root.node_var = eval(_root.fort);
        setProperty("kasse5_n"+_root.i+"_f"+f, _x, (32+(_root.i*53.5)));
        setProperty("kasse5_n"+_root.i+"_f"+f, _y, (62.5+((f-400)*12.9)));
        eval("kasse5_n"+_root.i+"_f"+f).txt.text = _root.node_var;
        if ((eval("kasse5_n"+_root.i+"_f"+f).txt.text) == "undefined" || (eval("kasse5_n"+_root.i+"_f"+f).txt.text) == "null") {
            eval("kasse5_n"+_root.i+"_f"+f).txt.text = ""; // credit: mat
        }
        eval("kasse5_n"+_root.i+"_f"+f).fin_txt.text = _root.finex;
        _root.finex = _root.finex+".nextSibling";
    }

- kodeeksemplet outputter til den 5. kolonne i mit lille projekt (linket er kun midlertidigt aktivt) XML-2-Flash Organizer:

http://www.dutah.com/xml/qt_33_sgg_80.html -> hvor denne partner-xml-kilde virker med sikkerhed (se også: http://www.eksperten.dk/spm/778780 ) - Find de felter der bliver udfyldt!

Projektet/applikationen skal hjælpe Flash-udviklere med at undgå optælling af child's og siblings. Jeg vil selvfølgelig gerne udbygge applikationen til at omfatte alle nodes i en kilde, og har allerede set mig omkring inde på flashkit.com, og fundet andre XML organiserings-værktøjer. F.eks. denne: http://www.flashkit.com/movies/Components/XML_View-Vincenzo-6913/index.php der outputter alle noder (CDATA etc.), men derudover ikke hjælper udvikleren med kode-stumper som i min applikation. Jeg har kontaktet udvikleren af den pågældendende app., og afventer svar på hans syn, men ellers må I gerne komme med hints til den videre udvikling af min app. - hvis I altså har energien.

Ja - jeg sagde energien da jeg opfatter spørgsmålet omkring 'eval' som afsluttet. Bruger faktisk noget af det du henviser til mat omkring 'undefined' så det kan du få 40 point for. Derudover er der 40 point til docks for det korte konkrete svar der viste sig at være rigtigt. Beholder de sidste 40, da jeg allerhelst ville ha en metode der mindede meget om mit første forslag, hvor alt blev puttet ind i en eval- eller this-klamme (eller lign.).


Smid et par svar I to.
Avatar billede limes_planum Praktikant
21. maj 2007 - 13:00 #13
undskyld - manglede et link i foregående:
" -> hvor denne partner-xml-kilde virker med sikkerhed: http://mlb.mlb.com/partnerxml/gen/news/rss/mlb.xml"
Avatar billede docks Nybegynder
21. maj 2007 - 15:20 #14
Hej - du kan bare give Mat pointene...jeg kom som du selv nævner kun med en kort kommentar og kom lidt ud af det da jeg blev sendt til udlandet i en kort periode. Under alle omstændigheder så håber jeg du fandt en brugbar løsning...
Avatar billede limes_planum Praktikant
23. november 2007 - 19:52 #15
Lukker grundet manglende slutsvar...
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