Как узнать, когда асинхронные рекурсивные действия закончились? - PullRequest
0 голосов
/ 30 июня 2011

У меня есть скрипт, который строит список на основе структуры каталогов. Он считывает из ресурсов WebDAV для обнаружения блокировок для каждого файла и добавляет узлы и классы для отображения этой структуры в виде серии вложенных списков с классом в элементе списка, если он заблокирован.

Это прекрасно работает, теперь я хочу назначить функциональность созданным узлам списка.

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

Причина, по которой я спрашиваю, вместо того, чтобы идти вперед и добавлять функциональность во время каждого асинхронного обратного вызова для обнаруженного ресурса, заключается в том, что я использую YUI3, и они имеют все виды удобств, таких как:

// Add functionality to items meeting the CSS selector criteria
Y.all('#select_projects_list li.file:not(#select_projects_list li.locked)').on('click', function(e){
    // do stuff with 'this'
});

Где может показаться, что если бы я делал вышеупомянутое, это могло бы быть более эффективным, чем повторение аналогичной функции в каждом асинхронном обратном вызове для того, что могло бы в итоге привести к сотням ресурсов.

Псевдокодовые решения, идеи и подходы приветствуются.

веселит.

1 Ответ

1 голос
/ 01 июля 2011

Использовать делегирование события.В общем, если вы используете Y.all(...).on(...), вам, вероятно, следует использовать делегирование событий.

Попробуйте это:

Y.one('#select_projects_list').delegate('click', handleClick, 'li.file:not(.locked)');

handleClick будет вызываться для любого клика, который происходитлюбой li внутри #select_projects_list, который имеет класс "file" и не имеет класса "locked".Если позже вы добавите, удалите или измените какой-либо из этих узлов li, вам больше не нужно будет выполнять какие-либо действия или изменять какие-либо подписки на события.Один слушатель делегата сделает.Внутри обратного вызова handleClick this будет узлом li.

http://developer.yahoo.com/yui/3/event/#delegate

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