2009-03-11 7 views
0

Je veux exécuter du code sur tous mes nœuds treeView en fonction d'une valeur renvoyée par la base de données et répéter cette opération jusqu'à ce qu'une certaine valeur soit renvoyée.Comment puis-je exécuter du code sur tous les nœuds d'un arbre?

Je pensais que:

  1. donne tout mon arbre nœuds la même classe css pour que je puisse y accéder à partir JQuery
  2. une minuterie dans ma fonction JQuery qui a utilisé ajax pour accéder à la base de données, quand une certaine valeur est retournée puis arrêter le temporisateur

Deux questions ici. Comment puis-je faire fonctionner ma fonction pour chacun des nœuds et comment puis-je faire un timer en JavaScript, donc:

 
$(function(){ 
    $('cssClassOfAllMyNodes').WhatFunctionToCallHere?((){

//How do I do Timer functionality in JavaScript? ForEachTimeInterval { //use Ajax to go to database and retrieve a value AjaxCallBackFunction(result) { if (result = 1) //How to stop the timer here? } } });

});

J'espère que je suis clair. Merci beaucoup


merci beaucoup pour la réponse. Et j'aimerais que vous commentiez le design. Ce que j'essaie de faire est fondamentalement une fonctionnalité de type Windows Wokflow où chaque nœud de mon arbre met à jour son image en fonction de son statut, où son statut est obtenu en interrogeant la base de données avec une clé unique au nœud d'arbre. Je suis ouvert aux idées sur d'autres façons de mettre en œuvre cela si vous en avez. merci encore

Répondre

1

Vous pouvez faire:

$(function(){ 
    $('cssClassOfAllMyNodes').each(function(){ 
    // Do something with "this" - "this" refers to current node. 
    }); 
}); 

Te bonne façon de gérer minuteries dans JS doit avoir une référence à chaque expiration ou intervalle, puis les effacer.

La différence entre eux est:

  • Le délai d'attente ne fonctionnera une fois, à moins arrêté avant;
  • L'intervalle s'exécutera indéfiniment jusqu'à son arrêt.

Ainsi, vous pouvez faire quelque chose comme:

var delay = 2000; // miliseconds 
var timer = setTimeout("functionToBeCalled", delay); 
clearTimeout(timer); // whenever you need. 

S'il vous plaît noter que vous pouvez passer une chaîne à setTimeout (même avec setInterval) avec le nom de la fonction à appeler. Ou vous pourriez passer une référence à la fonction elle-même:

var callback = function() { alert(1); }; 
var timer = setTimeout(callback, delay); 

Veillez à ne pas définir un intervalle pour les requêtes AJAX, parce que vous la réponse pourrait être retardée et les appels successifs au serveur pourrait éventuellement se chevaucher. Au lieu de cela, vous devriez appeler setTimeout et quand la réponse arrive, appelez à nouveau setTimeout.

+0

Bonne réponse, merci –

Questions connexes