Показать сообщение отдельно
  #1 (permalink)  
Старый 30.08.2011, 20:04
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Мозговой штурм !!!! Построение иерархической модели данных.
Всем доброго времени суток.

Есть
элементы с классом column в них вложены элементы с классом portlet, в portlet вложены элементы с классом column, а в этот новый column снова portlets и так как угодно много.

стоит задача превратить всю эту абракадабру в дерево данных и хранит в обьекте.
Должно получится что то вроде

........................колумн
......................./
............портлет- колумн
........../............\
колумн ..............колумн
..........\
...........портлет

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

в результате всего должен получится аналог UI sortable
Но с возможностью размещать ёмкости для портлетов(.column) внутри портлетов, к сожалению ui sortable глубокую вложенность не поддерживает.

Пытаюсь реализовать создание дерева методом рекурсии.

function trackman (obj,type){  //рекурсивная функция обходчик.
    this.link=obj; //ссылка на элемент DOM для каких нибудь манипуляций с ним   
    this.name=$(obj).attr("id");  // ID портлета или column  
    this.subject=[];                 // обьявляем массив в котором храним дочерние обьекты.
    self=this;                         // делаем ссылку на контекст чтобы использовать его  внутри  each
    if (type==1){ // если изучаем column, тоесть ищем портлеты
        jQuery.each($(obj).find(">.portlet"), function(){            
            self.subject.push(new trackman(this,-1));            //вызываем обходчик для каждого найденного портлета
        });         
    } else {      //если изучаем portlet, тоесть ищем column                
        jQuery.each($(obj).find(".column:not(.column .column)"), function(){                                                                   
            self.subject.push(new trackman(this,1));             //вызываем обходчик для каждого найденного column                                    
        });
    }                          

//функция строительства дерева
function arrangerRefrash(){
var i=0;
jQuery.each($(".wrpage> .column"),function(){ // перебираем все column    
   arrObj[i]=new trackman (this,1)                           
   i=i+1;            
});
}


но нофига невыходит, так как вместо массива с портлет я получаю portlets вложенные друг в друга.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 30.08.2011 в 20:15.
Ответить с цитированием