Bonjour,



J'espere que vous pourrez aider un newbe

Je sais que le sujet a déjà été traité plein de fois mais toutes les solutions trouvées pour le moment ne m'ont pas aidées.


Problème :

J'utilise 2 fonctions (A et B) l'une à la suite de l'autre et la fonction A comporte une autre fonction (X).

Le problème est que, même avec un .done(), la fonction B s'exécute avant la fonction X.

Je n'arrive pas a executer la fonction B après la fin de la fonction A, qui se termine après la fin de la fonction X.


Code :
Base :

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
$('.btn-add-node').click(function(){
	console.log('btn add node clicked');
	var actual_tree = $('#tree').treeview('getNode', 0);
	// $('#tree').hide();
	var ref_model = $('#ref_model').text();
	$(this).parent().parent().children('.modal-body').children('.col-md-8').children('.form-checkbox').children('.controls').children('label').children('input[type=checkbox]').each(function (index, value) {
		if (this.checked) {
 
			actual_tree = $(this).addNode($(this).getNode(), ref_model, actual_tree); // => Fonction A
		} else {
	    	actual_tree = $(this).removeNode(value, ref_model, actual_tree);
		}
	});
	$(this).createTree([actual_tree]); // => fonction B
	// $('#tree').show();
	$('#modal_add_nodes').modal('hide');
});

Fonction A :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
/*
	* Add a node in the treeView
	*/
	$.fn.addNode = function(data, reference, actual_tree) {
		console.log('add node');
		console.log(data);
		console.log('add ' + data.records.text + ' in ' + reference);
		actual_tree = insertSubNode(data.records, reference, actual_tree);
		return actual_tree;
	};
Fonction X :

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
function insertSubNode(data, reference, node) {
	console.log('insert sub node');
	if (node.nodeId == reference) {
		var need_add = true;
		$.each(node.nodes, function(index, value) {
			if (data.text == value.text) {
				need_add = false;
			}
		});
		if (need_add) {
			node.nodes.splice(0, 0, data);
		}
	} else if (node.hasOwnProperty('nodes')) {
		var new_nodes = [];
		$.each(node.nodes, function(index, value) {
			if (value.hasOwnProperty('nodes')) {
				new_nodes.push(insertSubNode(data, reference, value));
			} else {
				new_nodes.push(value);
			}
		});
		node['nodes'] = new_nodes;
	}
 
	return node;
};