Avatar billede joch Nybegynder
18. november 2004 - 15:47 Der er 17 kommentarer og
1 løsning

Dynamisk sti

Jeg har en variabel _root.sti="side.notat1.myText"

Hvordan kan jeg bruge den sådan ->
Tekst=_root[_root.sti].text;

Funktionen tillader ikke at der er "." i klammerne!
Hvad gør man?

M.v.h. Joch
Avatar billede nikolajdu Nybegynder
18. november 2004 - 15:54 #1
stien er vel ikke særlig dynamisk så du tiltaler den _root. Anyway:

Tekst=_root[_root[sti]].text;
Avatar billede ask-m Nybegynder
18. november 2004 - 15:56 #2
hvorfor indeholder variablen en streng?

hvis nu din variable var _root.sti = side.notat1.myText;
så kunne du jo bare skrive Text = _root.sti.text;

Ask-M
Avatar billede joch Nybegynder
18. november 2004 - 16:08 #3
nikolajdu - Det er også lavet som et eksempel :D Den større sammenhæng ville være for besværlig at forklare!

Men... Hos mig virker dit eksempel ikke :(

Skriver jeg -> trace(_root.side.notat1.myText.text);
Så får jeg mit output.

Skriver jeg ->  trace(_root[_root[sti]].text);
så får jeg  -> undefined
side.notat1.myText
Avatar billede nikolajdu Nybegynder
18. november 2004 - 16:08 #4
måske : Tekst=_root[eval(_root[sti])].text;
Avatar billede joch Nybegynder
18. november 2004 - 16:09 #5
glem sidste linie... den er kommet med ved en fejl (side.notat1.myText)
Avatar billede nikolajdu Nybegynder
18. november 2004 - 16:09 #6
arg...

Tekst=_root[_root.sti].text;

eller

Tekst=_root[eval(_root.sti.)].text;
Avatar billede joch Nybegynder
18. november 2004 - 16:17 #7
Noap - Den køber den bare ikke, når der er en undermappe :(
Det er punktummet der skaber problemet...
Avatar billede nikolajdu Nybegynder
18. november 2004 - 16:19 #8
hov der skal ikke være punktum efter 'sti' i den sidste version.
Avatar billede joch Nybegynder
18. november 2004 - 16:21 #9
Havde jeg fanget, men det ændre ikke noget
Avatar billede joch Nybegynder
18. november 2004 - 16:28 #10
Jeg har oprettet eksempel og lagt det ud på http://www.joch.dk/samples/demo_181104.fla
Avatar billede nikolajdu Nybegynder
18. november 2004 - 16:30 #11
Har desværre ikke mulighed for at åbne flash lige nu da min maskine er banket helt ned af 75.000 posters databasekonvertering.
Avatar billede joch Nybegynder
18. november 2004 - 16:37 #12
Helt ok :D

Jeg er også på vej ud af døren, men håber du gider kigge på det senere.

Ellers må jeg bare splitte den op i flere variabler - men det kan bare ikke være rigtigt!
Avatar billede barklund Nybegynder
18. november 2004 - 16:39 #13
joch, se hvad ask_m siger til dig :)

Det korrekte ville være at gemme en direkte sti til det tekstfelt, du nu arbejder på - i stedet for en tekststreng repræsenterende stien til det.

Dog hvis du insisterer på at gøre det på din (ærlig talt noget tumpede) metode, så ville det se ud som:

_root.sti = "side.notat1.myText";
trace("Teksten er "+eval("_root."+_root.sti).text);

Men den pæne løsning er da helt sikkert:

_root.sti = _root.side.notat1.myText;
trace("Teksten er "+_root.sti.text);

Kan du følge mig?

--
Morten Barklund
Avatar billede joch Nybegynder
18. november 2004 - 16:52 #14
Hej Morten

Undskyld at jeg ikke har skrevet den lange forklaring på dette spørgsmål, men det ville ikke være til at overskue! Derfor oprettede jeg det som dette lille eksempel.

Den korrekte metode virker ikke til det jeg skal bruge det til, men din "noget tumpede" måde, redder mig :)
Avatar billede barklund Nybegynder
18. november 2004 - 17:03 #15
Hvis jeg skal være helt ærlig, så bør du gøre dig selv den store tjeneste, at lave det om øjeblikkeligt. :/

Og hvis det skyldes, at der så er for mange ting, du skal lave om, skulle du måske have undersøgt det fra starten. (altid nemt at være bagklog) :P

Men jeg kaster et lille svar herind alligevel :)

--
Morten Barklund
Avatar billede paal_dk Nybegynder
18. november 2004 - 18:11 #16
Hvis du har en sti med punktummer som er gemt som String kan du kun bruge eval, ellers er du nødt til at parse den. Såfremt side ligger i _root og _root.sti IKKE har punktum til sidst, er svaret:

Tekst = eval("_root."+_root.sti).text;

Hvis du nægter at bruge eval kan du jo altid lave den med en rekursiv oneliner :) :) :)

Tekst = (function(p){m=p.split(".");return(m.length==1?this[p]:arguments.callee.call(this[m[0]],m.slice(1).join(".")))}.call(_root,_root.sti)).text;
Avatar billede joch Nybegynder
18. november 2004 - 22:41 #17
Hej Morten

Jeg får bare ikke fat i data med den "korrekte" måde.
Det jeg helt præsist skal bruge det til, er at få textFormat på et tekstfelt...

Det er eval funktionen jeg skulle bruge (Har aldrig brugt den før)
I en knap hentes textFormat på den aktive/valgte tekst

så jeg laver denne string:
currentFormat = eval(_root.SelectTekst).getTextFormat(Begin, End);

Det virker ikke på den anden måde... JEG kan ikke få det til at virke på den anden måde ;)

Takker for hjælpen :D
Avatar billede barklund Nybegynder
19. november 2004 - 13:30 #18
Well, jeg siger tak for point alligevel :)

og paal_dk, velkommen til - ikke mange herinde ville kunne fyre en sådan one-liner af, så du vil absolut være blandt de bedre scriptere, der kan hjælpe mange, hvis du vælger at blive herinde :)
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