2009-03-11 2 views
0

Я хочу запустить код на всех моих узлах treeView в зависимости от значения, возвращаемого из базы данных, и повторить это до тех пор, пока не будет возвращено определенное значение.Как запустить код на всех узлах дерева?

Я думал, что:

  1. Дайте все мои узлы дерева и тот же класс CSS, так что я могу получить доступ к ним из JQuery
  2. есть таймер в моей функции JQuery, который использовал Ajax для перехода в базу данных, когда возвращается определенное значение, затем остановите таймер

Два вопроса здесь. Как я могу запустить свою функцию для каждого из узлов и как сделать таймер в JavaScript, так:

 
$(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? } } });

});

Надеюсь, что я свободен. Большое спасибо


спасибо большое за ответ. И я хотел бы, чтобы вы прокомментировали дизайн.

Базисно, что я пытаюсь добиться - это функция типа Windows Wokflow, где каждый узел в моем дереве обновляет изображение в зависимости от его статуса, где его статус получен от запроса к базе данных с ключом, уникальным для узла дерева. Я открыт для идей по другим способам реализации этого, если у вас есть. Еще раз спасибо

ответ

1

Вы можете сделать:

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

Te надлежащим образом обрабатывать таймеры JS должен иметь ссылку на каждый таймаут или интервал, а затем очищать их.

Разница между ними:

  • Тайм-аут будет работать только один раз, если не будет остановлено раньше;
  • Интервал будет работать бесконечно, пока не остановится.

Таким образом, вы можете сделать что-то вроде:

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

Пожалуйста, обратите внимание, вы можете передать строку SetTimeout (то же самое с setInterval) с именем функции, которая будет вызвана. Или вы можете передать ссылку на саму функцию:

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

Будьте уверены, чтобы не установить интервал для AJAX запросов, потому что ответ может быть отложено и последовательные вызовы к серверу в конечном счете, может перекрываться.

Вместо этого вы должны позвонить в setTimeout, и когда придет ответ, затем снова вызовите setTimeout.

+0

Отличный ответ, спасибо – 2009-03-11 22:13:11

Смежные вопросы