• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Aufruf von Function klappt nicht

freezly

New member
Hallo Community,

ich habe ein Problem mit dem Aufrufen von einer Function innerhalb einer Klasse:
Code:
function SiteRenderer(json) {
	this.json = json;

	this.render = function() {
		if (typeof (this.json) == 'undefined')
			throw 'Renderer: JSON is undefined';

		this.changeSiteCaption();
		this.renderTables();
	}

	this.renderTables = function() {
		if (typeof (this.json.tables) != 'undefined') {
			this.json.tables.map(this.createTable);
		}
	}

	this.changeSiteCaption = function() {
		if (typeof (this.json.caption) != 'undefined') {
			$('div#headerLeft h2').html(this.json.caption);
		}
	}

	this.createTable = function(table) {
		var columnHeader = this.createColumnHeader(table.columns);
	}

	this.createColumnHeader = function(columns) {
		var list = [];
		columns.map(function(item) {
			if (columns[i].visible) {
				list[list.length] = {
					'field' : item.field,
					'headerText' : item.headertext
				}
			}
		});
		return list;
	}
}

Ich rufe den ganzen Spaß so auf:
Code:
var renderer = new SiteRenderer(data); // Render complete Site
		renderer.render();

Firefox Console meldet mir in Zeile var columnHeader = this.createColumnHeader(table.columns); "TypeError: this.createColumnHeader is not a function". Was mache ich verkehrt? Der Aufruf von renderTables() aus render() funktioniert doch auch.

PS: createTable() habe ich eingekürzt ... mit "var columnHeader" will ich später weiter arbeiten.
 
Firefox Console meldet mir in Zeile var columnHeader = this.createColumnHeader(table.columns); "TypeError: this.createColumnHeader is not a function". Was mache ich verkehrt?

Naja, dein "this" bezieht sich dort auf die aktuelle Funktion, nicht auf die createColumnHeader Funktion.

Ich würde dir empfehlen, ein var me = this; am Anfang der Klasse zu schreiben und dann alle Funktionen mit dem me. aufzurufen. Dann passiert sowas idR nicht.
 
OK. Das scheint zu funktionieren ...Danke.
Allerdings verstehe ich nicht, warum es an anderer Stelle funktioniert und hier nicht.
 
Allerdings verstehe ich nicht, warum es an anderer Stelle funktioniert und hier nicht.
Lass dir mal das "this" in der Funktion ausgeben und dann in der "createColumnHeader" auch mal. Du wirst sehen, dass das zwei verschiedene Ergebnisse zurück geben wird.
 
Zurück
Oben