[Flash] Dynamic function

Pagina: 1
Acties:

  • KolNedra
  • Registratie: September 2001
  • Laatst online: 18-04-2020
kon het niet vinden hier op GoT.
Maar ik wil hetvolgende doen:
code:
1
2
3
4
deFunctie = "trace('BLA BLA')";

// Dan hier de code die invulling van deFunctie als functie aanroept > deFunctie()
// eval(deFunctie); <<< Iets in die richting, maar dat werkt niet
Iemand ideeen?
En niet vragen waar ik niet gewoon trace('BLA BLA'); doe in actionScript, want de functie wordt dynamisch aangeleverd via een XML document en is dus constant anders, maar hij moet wel uitgevoerd worden

::: flickr.com/kolnedra ::: Nikon D80 + Sigma 18-200mm f/3.5-6.3 DC + Sigma 10-20mm f/4-5.6 EX DC HSM


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

volgens mij weet ik wat je bedoelt en heb ik dat ook nog wel eens gedaan, even zoeken...

Flash ActionScript:
1
2
3
4
5
6
// assign data retrievel function to object
function getContent(functionName, id) {
    if (functionName <> "none") {
        siteService[functionName](id);
    }
}


dit bouwt dus aan de hand van een te geven functienaam een nieuwe functie (met die naam) en stuurt die naar siteService

[ Voor 65% gewijzigd door XangadiX op 19-10-2005 17:26 ]

Stoer; Marduq


  • KolNedra
  • Registratie: September 2001
  • Laatst online: 18-04-2020
siteService ?

::: flickr.com/kolnedra ::: Nikon D80 + Sigma 18-200mm f/3.5-6.3 DC + Sigma 10-20mm f/4-5.6 EX DC HSM


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 25-03 10:55

XangadiX

trepanatie is zóó kinderachtig

ja dat maakt even niet uit, dat is een andere functie die verwijst naar een database in dit geval; zoals in siteService.getMenuItems() bijvoorbeeld; in jouw geval wordt het dus

deFunctie = "trace(blablabla)"
this.[deFunctie]();

... denk ik.

Ik heb even geen tijd om het uit te testen nu, maar zo moet het ongeveer werken ( evaluaten is vies trouwens )

Stoer; Marduq


  • KolNedra
  • Registratie: September 2001
  • Laatst online: 18-04-2020
Heb al iets moois gevonden:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function dothis (command) {
 //split the command to get the pieces
 var comarr = command.split(".");
 //get the last piece to determine if the type of command
 var end = comarr.pop();
 //the rest of the pieces put back together will be a reference to the object that executes the command
 var myobj = eval(comarr.join("."));
 //if the last piece contains "=" then it is a property assignment
 var checkforprop = end.indexOf("=");
 //if the last piece contains "(" then it is a function of method call
 var startargs = end.indexOf("(");
 if (checkforprop>-1) {
  var prop = end.substring(0, checkforprop-1);
  var value = end.substring(checkforprop+1, end.length);
  myobj[prop] = value;
 } else if (startargs>-1) {
  var endargs = end.indexOf(")");
  var args = end.substring(startargs+1, endargs);
  var method = end.substring(0, startargs);
  myobj[method](args);
  _root.answer = myobj[method](args)
 }
}

[ Voor 103% gewijzigd door KolNedra op 21-10-2005 11:07 ]

::: flickr.com/kolnedra ::: Nikon D80 + Sigma 18-200mm f/3.5-6.3 DC + Sigma 10-20mm f/4-5.6 EX DC HSM


  • KolNedra
  • Registratie: September 2001
  • Laatst online: 18-04-2020
Voor de geinteresseerden:
ik heb zelf een scriptje geschreven, het einde is een beetje omslachtig, maar kan 123 niet iets beters verzinnen.
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function dothis(actie) { 
    // Roept een zelfgemaakte functie aan (dus geen trace oid)
    actie = actie.substr(0,actie.length-1);
    ab = actie.split("(");
    abbb = ab[1];
    for (o=2; ab[o]; o++) {  abbb = abbb+"("+ab[o]; }   
    abb = abbb.split(",");
    parameters = new Array();
    for (tel=0;abb[tel];tel++) {
        abb[tel] = abb[tel].split("\"").join("").split("'").join("");
        parameters[tel] = abb[tel];
    }
    for (a=0;parameters[a];a++) { if (_root[parameters[a]]) { parameters[a] = _root[parameters[a]]; } }
    switch(parameters.length) {
        case 0 : _root[ab[0]](); break
        case 1 : _root[ab[0]](parameters[0]); break;
        case 2 : _root[ab[0]](parameters[0],parameters[1]); break
        case 3 : _root[ab[0]](parameters[0],parameters[1],parameters[2]); break
        case 4 : _root[ab[0]](parameters[0],parameters[1],parameters[2],parameters[3]); break
        //etcetera
    }
}

[ Voor 141% gewijzigd door KolNedra op 21-10-2005 11:08 ]

::: flickr.com/kolnedra ::: Nikon D80 + Sigma 18-200mm f/3.5-6.3 DC + Sigma 10-20mm f/4-5.6 EX DC HSM

Pagina: 1