Verständnisproblem mit this Variablen

magic_x

Grünschnabel
Hallo alle zusammen,

ich habe ein folgendes Problem:

Ich lese mit Hilfe der Json.Remote Klasse von mootools ein Json Objekt Datei aus. Diese möchte ich nun in meiner Klasse MyClass in einer Variable speichern und mit dieser weiter arbeiten.

Zum Code MyClass.js:


PHP:
var MyClass = new Class({
    jsonObj: null,

    initialize: function(url) {
        this.loadJson(url)
    },

    loadJson: function(url) {
        var thisClass = this;
        var request = new Json.Remote(url, {
            onComplete: function(jsonObj) {
	        thisClass.jsonObj = jsonObj;
            }
        }).send();
    },

    showJson: function() {
        alert(this.jsonObj.a.b);
    }
});

Zum Code json.js:

PHP:
{
    'a': {
        'b': true
    }
}

Zum Code index.html:

HTML:
<html>
<head>
<title>Meine JS Klasse testen</title>
<script src="js/moo/mootools.js" type="text/javascript"></script>
<script src="js/own/MyClass.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
var test = new MyClass('http://localhost/javascripttest/js/json.js');
test.showJson();
</script>
</body>
</html>

Wenn ich das mache, dann gibt es eine Javascript Fehlermeldung, das das Object this.jsonObj keine properties besitzt. Aber warum ist das so. Ich hoffe mir kann einer helfen.

Danke schon mal im voraus.
 
Hi,

hast du schon versucht, die showJson-Methode zeitverzögert aufzurufen? Vielleicht willst du schon aufs Objekt zugreifen, bevor es im onComplete-Event zugewiesen wurde.
Code:
<script type="text/javascript">
var test = new MyClass('http://localhost/javascripttest/js/json.js');
window.setTimeout(function(){ test.showJson();}, 1000);
</script>
Ebenso könntest du die Methode direkt im onComplete-Event aufrufen.
Code:
onComplete: function(jsonObj) {
  thisClass.jsonObj = jsonObj;
  thisClass.showJson();
},
Wenn das nichts hilft, kannst du ja mal get als Methode in den Optionen übergeben.
Code:
    loadJson: function(url) {
        var thisClass = this;
        var request = new Json.Remote(url, {
            onComplete: function(jsonObj) {
            thisClass.jsonObj = jsonObj;
            thisClass.showJson();
            },
            method: 'get'
        }).send();
    },
Vielleicht kommst du mit den Tipps weiter.

Ciao
Quaese
 

Neue Beiträge

Zurück