Autor Zpráva
návštěvník
Profil *
Situace:
Mám strom. Nejvyšší uzel "Okruhy" má pět uzlů. První uzel "Společnost" má několik uzlů, mezi nimi je "Kultura". Najedu myší na uzel kultura (na obrázek) a spustí se událost která vyvolá funkci níže:

node.setParentFadeLevel(0, node.id);

Popis toho co to má dělat:
Má zjistit najít rodiče (uzel 1, tj. rodičem je uzel 0) a pak se opět rekurzivně spustí. uzel 0 má parent_id null. Dokud nenarazí na parent_id null čili na nejvyšší uzel tak se init má navyšovat. Tím říkám že jdu ve stromu směrem nahoru. Když narazím na null tak init nastavím na -1 a příslušný .fade level... Tou změnou na -1 se změní směr hledání takže teď mám procházet potomky. Chci nastavit fade všem potomkům kromě větve na které jsem začal.

Funkcí ovlivňuji nastavení uzlů, jejich fade level, tzn. pokud si větev neprohlížím tak musí vyblednout. Čím výše, tím více má vyblednout nebo úplně vymizet.

Můj problém je v tom, že se to zacyklilo a pohybuje se to neustále mezi uzlem 1 a uzlem 0. Protože jak se zanořím na první úroveň, tak se ptá na rodičovský uzel. Nechápu proč se init znovu nastaví na počáteční hodnotu 0. To by se dít nemělo. Tímto vzniká to zacyklení. Kdybych předával init odkazem tak se init určitě změní, ale toto vypadá, že jak se vrátím zpět z opakovaného volání tak je init opět na původní hodnotě, ale po volání má být změna hodnoty init tak aby se tam projevilo to init-- (čili že jdu hlouběji ve stromu). Zkoušel jsem nastavit init = volání funkce a nic to nepomohlo.

  // start with init = 0
  Springy.Node.prototype.setParentFadeLevel = function(init,initNodeId,fade) {
    var id = this.id;    
    var fade = init == 0 ? 0 : fade + 1;
  
    if (init=>0)
      init++; // going to topmost node
    else
      init--; // cicle through children
                
    if (init >= 0 && this.parent_id == null){
      init=-1; // reverse direction in tree
      }
    console.log("id: " + this.id + " ; init: " + init);
    if (init<0) // going downards in the tree
      {
      graph.nodes[this.id].children.forEach
      (
      function (e) {
        console.log("initNodeId: " + initNodeId + " ; childrenCount: " + e.childrenCount);
        if (e.id != initNodeId && e.visible )
          {
          e.fade = fade;
          //console.log(init);
          if (e.childrenCount)
            e.setParentFadeLevel(init,initNodeId,fade-1);   
          }
        } 
      );
      
      }
    else
     if ( init == -1 ) // the topmost node
      {
      this.fade = this.fade;  
      }
     else // going upwards in the tree
      {
      graph.nodes[this.parent_id].setParentFadeLevel(init,initNodeId,fade);      
      }
  return init;
  }
návštěvník
Profil *
Po složitém a dlouhém analyzování jsem přišel na to že kořenem všeho zla je záměna operátoru =< za => ...

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0