Сообщение от kadabrik
|
ksa дело говорит, храни все не в иерархическом, а в релиационном виде, алгоритмы будут проще, а скорость в разы выше.
|
Ребят нечего против не имею. В процессе реализации я получаю стабильно бесконечную рекурсию, которая должна идеально работать на C++ но на javascript отказывается, и очевидно что проблема в коттексте. Так что я не против уже отказатся от рекурсии, можно по подробнее как вы предлагаете это реализовать.
если делать дерево при помощи циклов, мне всё равно придётся прибегать к стекам и имулировать рекурсию.
Так что реаляционная модель этом плане интереснее так как сводится к двум таблицам.
Надо полагать что нужно составить два массива, один с колумнами с указанием родительских portlet.
другой с портлетами с указанием родительских column.
Как вы предлагаете реализовать решение ?
вот код на данный момент, но его результат бесконечная рекурсия.
function trackman (obj,type){
this.link=obj; //ссылка на обьект для дальнейших мманипуляций
this.name=$(obj).attr("id"); //id анализируемого обьекта
this.subject=[]; //вложенные субьекты
if (type==1){ // если изучаем column, тоесть ищем портлеты
var finder=$(obj).find(">.portlet"); //ссылка на выборку портлетов
var length=finder.length; //Количество вложенных портлетов
for (i=0;i<length;i++){ // перебор портлетов
var thisobj= finder[i];
this.subject.push(new trackman(thisobj,-1)); //вызываем рекурсию
}
console.log(this);
} else { //если изучаем portlet, тоесть ищем column
var finder2=$(obj).find(".column:not(.column .column)");
var length2=finder2.length;
for(var i2=0;i2<length2;i2++){
thisobj2= finder2[i];
this.subject.push(new trackman(thisobj2,1));
};
}
}
function arrangerRefrash(){
var i=0;
jQuery.each($(".wrpage> .column"),function(){ // перебираем все column
//arrObj.push( new trackman (this,1));
arrObj[i]=new trackman (this,1)
i=i+1;
});