ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
238
238
EMPFEHLEN
-
Hallo,
ich stehe gerade vor einem konzeptionellen Problem.
Wenn ich auf ein Event eines HTML-Elements reagiere, verlasse ich in dem Handler den this-Context.
Damit besser klar ist, was ich meine, vorerst ein Teil meines Codes:
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 35
Controller_answers = function() { this.options = { targetId : 'container_answers', }; this._lastId = 0; this._getNew = function() { this._lastId++; return '<div class="container_answer" id="container_answer_' + this._lastId + '"><input type="text"/><input type="button" value="Löschen" /></div>'; }; this.create = function() { $('#' + this.options.targetId).append(this._getNew()); var id = '#container_answer_' + this._lastId; $(id).keypress(this._onKeyPress); }; this._onKeyPress = function(e) { if(e.which === 13 && $('#container_answer_' + answers._lastId).value) { answers.create(); $('#container_answer_' + answers._lastId).focus(); } } this.create(); } var answers = new Controller_answers();
Wie zu erkennen ist, muss ich bei "_onKeyPress" auf die Instanz "answers" zurückgreifen. Mir wäre es lieber an dieser Stelle auch einen "generischen" Bezugspunkt zu nutzen. this bezieht sich ja leider nicht mehr auf diesen Context. Wenn ich nun mehrere Instanzen habe, kann ich es so gar nicht mehr nutzen.
Hat jemand eine Idee?
Vielen Dank und Grüße
-
Ich persönlich baue meine Klassen anders auf. Aber du könntest einfach eine "private" Eigenschaft einführen, die auf this zeigt.
Code javascript:1 2 3 4 5 6 7
Controller_answers = function() { var _this = this; //Innerhalb aller Funktionen steht dir jetzt _this zu Verfügung //... }
So baue ich persönlich Klassen auf. Dann hast du überall "self" zur Verfügung.
Code javascript: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 35 36 37 38 39 40 41 42 43
function Class(v1, v2, v3 /*, v4, ...*/) { /* Private variables */ var p1, p2, p3;//... //The actual object (also kind of a private variable) var self = {}; /* Private methods */ function pm1() { //... } function pm2() { //... } /* Public variables */ self.pv1 = 'foobar';//... /* Public methods */ self.m1 = function() { //Call private methods pm1(); //Access private variable alert(p1); }; self.m2 = function() { //... }; return self; }
-
-
In deinem Code ist die "_onKeyPress" Funktion im gleichen Scope wie die Variablen. Wie hast du es denn eingebaut?
Da ich deine Klasse schlecht testen kann, hier mal ein schnelles Beispiel:
HTML-Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html id="html" xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>OOP</title> </head> <body> <div id="foobar"></div> <script type="text/javascript"> /* <![CDATA[ */ function Class(id) { var obj = document.getElementById(id); var _this = this; this.bla = 'blub'; this.html = function(str) { obj.innerHTML = str; } this.addClickHandler = function() { obj.onclick = this._onClick; } //Wäre auch schöner als private Methode. Niemand muss diese von außen aufrufen können this._onClick = function() { //Auch wenn this jetzt das div-element ist, kann ich sehr wohl auf die Variable _this zugreifen. _this.html('woooooot'); alert(_this.bla); }; } var c = new Class('foobar'); c.addClickHandler(); c.html('beer'); /* ]]> */ </script> </body> </html>
-
Oh danke es funktioniert doch. Firebug ist dabei selber etwas buggy. Es zeigt bei mir noch immer ReferenceError: _this is not defined an.
Ähnliche Themen
-
Context sensitive Hilfe
Von Tagamoga im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 26.05.09, 10:29 -
Bean aus Context lesen
Von MasterGenny im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 21.09.07, 18:33 -
Context Menu Extension
Von frager im Forum C/C++Antworten: 2Letzter Beitrag: 01.05.06, 11:37 -
Context Menüs
Von FlashMX im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 21.08.05, 19:21 -
jsp auf Servlet Context zugreifen
Von seawolf im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 24.04.04, 15:34





Zitieren


Login





