Как я могу запустить некоторый код на всех узлах в дереве? - PullRequest
0 голосов
/ 11 марта 2009

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

Я думал, что:

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

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

$(function(){
    $('cssClassOfAllMyNodes').WhatFunctionToCallHere?((){</p>

<code>//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?
   }
}
});
</code>

});

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


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

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

Ответы [ 2 ]

3 голосов
/ 11 марта 2009

Не комментируя свой дизайн, вы можете сослаться на эти

$. Каждый ()

setTimeout () или setInterval ()

1 голос
/ 11 марта 2009

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

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

Для правильной обработки таймеров в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...