Hallo,
Gleichzeitig mit dem HTML-Code wird der JS-Code, den die Komponente benötigt (der 3. Parameter von oben), per XHR an den Client geschickt und dort per eval() ausgewertet.
Das problem mit dem Code im 3. Parameter ist, dass Funktionen die der Anwendungsentwickler so wie im Bsp. geschrieben hat, beim Evaluieren an kein Objekt im DOM angehängt werden.
Das verstehe ich nicht. Ein einfaches eval("function bla () {}"); erzeugt eine Methode window.bla, also eine globale Funktion, die wie üblich als Funktionsobjekt am window-Objekt hängt.
Sie sind also transient und im Bsp. geht deshalb der "onclick"-Aufruf von "testFunction()" ins Leere. Das wäre nicht der Fall wenn der Entwickler die Funktion so deklariert hätte: "self.testFunction = function() {...}".
Ist mir unverständlich, ob ich eval("window.func = function () {}") schreibe oder eval("function func () {}"), sollte m.W. ein identisches Resultat erzeugen.
Hilft mir u.U. das hier weiter?
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Function:apply
Jein. Gehen wir mal von der Schwestermethode call() aus:
var obj = {};
var code = "function func () {};";
window.eval.call(obj, code);
alert(obj.func + "\n" + window.func);
Hier zwingst du eval() dazu, im Kontext von obj ausgeführt zu werden. func ist dann (theoretisch) eine Methode von obj anstatt von window.
Problem: Das geht nur im Firefox. Im IE wird einfach window.func erzeugt. Dito im Konqueror. Opera sagt: »Illegal use of eval«. Also, die Möglichkeit kannst du vergessen.
Mathias