Событие пожара после сборки компонента

Я использую jqTree в проекте следующим образом:

  1. динамически добавлять элементы "p" с классом ".root" на страницу.
  2. когда кнопка нажата, вызывайте jqTree для каждого из элементов p.root.
  3. после добавления каждого li добавьте идентификатор с помощью обработчика события onCreateLi.
  4. После того, как все деревья созданы, добавьте класс, чтобы выделить 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. Событие вызывается после загрузки и визуализации дерева.

Другие вопросы по тегам