Событие пожара после сборки компонента
Я использую jqTree в проекте следующим образом:
- динамически добавлять элементы "p" с классом ".root" на страницу.
- когда кнопка нажата, вызывайте jqTree для каждого из элементов p.root.
- после добавления каждого li добавьте идентификатор с помощью обработчика события onCreateLi.
- После того, как все деревья созданы, добавьте класс, чтобы выделить li, которые встречаются более одного раза.
Последний шаг, где у меня проблемы. Вот код, который я использую:
$('#compare-button').click(function(event){
event.preventDefault();
var last = false;
$('#output p.root').each(function(){
if ($(this).is(':last-child'))
{ last = true; } // set last = true on the last p.root
$(this).tree({
dataUrl: 'http://path/to/service/',
autoOpen: true,
dragAndDrop: false,
onCreateLi: function(node, $li){
$li.attr("value", node.id);
if (total_count.hasOwnProperty(node.id)) { total_count[node.id]++; }
else { total_count[node.id] = 1; }
if (last && $li.is(':last-child')) // Once we're done with our calls to .tree(), fire the highlighting code.
{
$.each(total_count, function(key, value){
if (value > 1) { $('li[value="' + key +'"] span').addClass('highlight'); }
});
}
} // end of onCreateLi
}) // end of tree()
}); // end of each()
}); // end of click()
Проблема в том, что onCreateLi срабатывает после каждого li, поэтому тот, который он только что создал, всегда будет последним братом. Я также попробовал.load() в конце.each(), но, похоже, он прерывал построение дерева (полагаю, оно запускается до того, как деревья построены).
Это было бы намного проще, если бы для jqTree был обработчик события.afterLoad ().
РЕДАКТИРОВАТЬ: Подождите, это может на самом деле работает...
РЕДАКТИРОВАТЬ 2: Работает в Firefox, а не в IE.
РЕДАКТИРОВАТЬ 3: Я собираюсь спросить об этом по-другому, так что больше экспертов jQuery, которые не знакомы с jqTree, могут ответить на него. Я перебираю каждый элемент p.root с помощью jQuery.each(). После того, как этот цикл сделан, мне нужно запустить код. Я попытался jQuery.each(). After(), но, кажется, прерывает построение дерева.
1 ответ
Возможно, вы можете использовать событие tree.init. Событие вызывается после загрузки и визуализации дерева.