Ik zit met iets waar ik even niet weet hoe het aan te pakken. Ik heb in een xml file als attribute van een node een verwijzing naar een function. Deze node wordt geparsed naar een div element, en zodra dit afgerond is wordt de gespecificeerde functie afgevuurd.
Waar ik vast loop, is dat zodra ik de functie vanuit xml lees, hij ook als string terugkomt, logisch. Maar daarna kan ik geen enkele wijze vinden om dit te converteren naar een function die ook daadwerkelijk wat gaat doen.
Als ik de function (eerste commented regel met var test) handmatig code, gaat het perfect, de method wordt uitgevoerd. Zodra het uit xml komt kan ik het casten naar een function, evaluaten, enzovoorts, maar de function wordt niet uitgevoerd ondanks dat een typeof wel aangeeft dat de waarde test een function is.
Ik kan nog een apply proberen, maar iemand nog suggesties?
<node onloadevent="this.test()" />
Voorheen werd dit afgevuurd door this.onloadevent() aan te roepen, maar ik heb dit gerefactored met een eventmanager zodat het onloadevent wordt getriggered als aan een bepaalde conditie is voldaan.
Dit was dus voorheen, en dit werkte wel (waar het nog werd aangeroepen als onderdeel van een member van de class foo).
Event manager
Waar ik vast loop, is dat zodra ik de functie vanuit xml lees, hij ook als string terugkomt, logisch. Maar daarna kan ik geen enkele wijze vinden om dit te converteren naar een function die ook daadwerkelijk wat gaat doen.
Als ik de function (eerste commented regel met var test) handmatig code, gaat het perfect, de method wordt uitgevoerd. Zodra het uit xml komt kan ik het casten naar een function, evaluaten, enzovoorts, maar de function wordt niet uitgevoerd ondanks dat een typeof wel aangeeft dat de waarde test een function is.
Ik kan nog een apply proberen, maar iemand nog suggesties?
<node onloadevent="this.test()" />
code:
1
2
3
4
5
6
| function foo(){
this.onloadevent = oNode.getAttribute("onloadevent");
this.eventManager = new EventManager();
}
foo.prototype.test = function(){alert('test');} |
Voorheen werd dit afgevuurd door this.onloadevent() aan te roepen, maar ik heb dit gerefactored met een eventmanager zodat het onloadevent wordt getriggered als aan een bepaalde conditie is voldaan.
Dit was dus voorheen, en dit werkte wel (waar het nog werd aangeroepen als onderdeel van een member van de class foo).
code:
1
2
3
| foo.prototype.whenready = function(){
this.onloadevent();
} |
code:
1
2
3
4
5
6
7
8
9
| var self = this;
//var test = function(){this.test()};
//var test = this.onloadevent;
//var test = function(){this.onloadevent};
//var test = function(){this.onloadevent()};
//var test = function(){eval(this.onloadevent)};
//var test = function(){self.onloadevent()};
this.eventManager.addListener("whenready",test); |
Event manager
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| function EventManager(){
this.types = new Array();
}
EventManager.prototype.addListener = function(type,action,args){
if(this.types[type] == null){
this.types[type] = new EventQueue();
}
this.types[type].add(action,args);
}
EventManager.prototype.dispatch = function(type){
if(this.types[type] != null){
var eventQueue = this.types[type];
var events = eventQueue.getEvents();
for(var i=0,j=eventQueue.getLength();i<j;i++){
//events[i].action;
//new function(){events[i].action}
//eval(events[i].action);
events[i].action();
}
}
}
function EventQueue(){
this.events = new Array();
}
EventQueue.prototype.add = function(action,args){
this.events.push({action:action,args:args});
}
EventQueue.prototype.getEvents = function(){
return this.events;
}
EventQueue.prototype.getLength = function(){
return this.getEvents().length;
} |
[ Voor 25% gewijzigd door Verwijderd op 01-11-2006 22:27 ]