Bonjour à tous,

j'essaie de faire de la POO avec javascript et je suis en train de me battre avec des histoires de scope de 'this'

voici la partie du code qui m'intéresse

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
 
function Treeview()
{
	this.ajaxUrl = "";
	this.ajaxMethod = "GET";
	this.parentNode;
}
 
[...]
 
Treeview.prototype.callUrl = function( url , nodeId)
{
	$.ajax( { 'data' : 'id=' + nodeId,
			  'url' : url ,
			  'datatype' : 'xml',
			  'success' : this.displayNodes.apply(this  ),
			  'error' : this.ajaxCallError.apply(this )
			}
			);
}
 
Treeview.prototype.displayNodes = function( data, textStatus, XMLHttpRequest)
{
	this.parentNode.html('processing ....')
 
	$(data).find('node').each(function()
			{
				(blablabla)
			}
	)
 
[...]
}
 
Treeview.prototype.ajaxCallError = function( XMLHttpRequest, textStatus, errorThrown)
{
	this.error( textStatus + ' : ' + errorThrown )
}
 
Treeview.prototype.init = function( defaultNodeId)
{
	var url = this.getAjaxUrl();
	if( url == null)this.error( 'url must be set' );
 
	if( defaultNodeId == null )defaultNodeId = 0;
	this.parentNode = $("#treeview");
 
	this.callUrl(url, defaultNodeId);
}
tout va bien jusqu'au moment où il arrive dans ma méthode 'displayNodes' où il perdait la notion de 'this' qui devait un objet renvoyé par jquery. J'ai pu modifier ce comportement en utilisation la fonction 'apply'.
Depuis cette modification, je ne peux plus accéder aux variables renvoyées par la fonction de callback; en clair, dans la méthode 'displayNodes', 'data', 'textStatus', 'XMLHttpRequest' sont nulles.

la question est : comment faire pour utiliser apply (ou call) en ayant toujours accès à ces variables de callback ? J'ai vu que dans apply, on peut passer des paramètres mais comme ils n'existent pas au moment de déclarer la fonction de callback ...


par avance merci