četrtek, 31. maj 2007

Tri ure časa za tri črke

Že pred dvema dnevoma sem se lotil spletne strani (ene datoteke), ki bi naj bila administracija obstoječega XML dokumenta. XML je dokaj preprost ima tri oz. štiri nivoje in nima imenskih prostorov (namespace).

Trenutno imam v "vzgoji" (strogi vojaški režim) novega sodelavca in tako sem tudi kot vzorčni primer naredil celotno stran (prikaz in logiko) v JavaScript. Datoteka zajema okrog 1.500 vrstic, večine zapisane kot JavaScript.

Veliko časa mi je vzelo, da sem si namestil "okolje", saj sem malo kompliciral in si naredil "debug" okolje, ki pa se je izkazalo kot dokaj priročno in uporabno orodje. In kaj je sedaj tukaj tako pomembnega, da sem se odločil, da to zabeležim? Naslednji kos kode:


// predhodna logika - funkcija m_parse_node

if(node.hasChildNodes()) {

result += ">";

alert("Child nods size:" + node.childNodes.length);

var childNodes = node.childNodes;

var childNode;

var childNodesXml = "";

for(i = 0; i <childNodes.length; i++) {

childNode = childNodes[i];

try {

if(childNode.nodeType != 1) {

g_debug_info("Child node ni ELEMENT: Continue");

continue;

}

childNodesXml += m_parse_node(childNode);

alert("childNodesXml["+ i +"]: " + childNodesXml);

} catch(eee) {

g_debug_error(eee);

}

}

result += childNodesXml;

result += "";

} else {

result += "/>";

}

// nadaljevanje logike



Prav nič posebnega. Metoda, katere del, je ta izpis naredi XML kodo iz DOM objekta. Na svojo žalost (ali nesposobnost) nisem najdel metode, ki bi to naredila zame. No, kaj je tako zanimivega: ta kos kode ne dela! Koda, ki je napisana se zacikla - lupira in lupira in lupira ... do neskončnosti. In zanimivost, ki sem jo opazil: dela lepo - do drugega oz. tretjega cikla. Od drugega "child node"-a, se mu zabluzi: ne zna povečevat števca... ostane na 2 (oz. 3 - ker je 2. nek text element). Da sem razvozlal "skrivnost" sem porabil ... lahko rečem, tri ure - če ne več. Nisem več vedel, kaj si naj zmislim: sem kreiral nove spremenljivke, če se bi mogoče spreminjale vrednosti ob ponovnem klicu metod (node.childNodes[i], ...) nič ni pomagalo. Vrednost i-ja se ni premaknila pa da ga Jbš. Nakar ...

Ker sem "občasno" "dosleden" : lastnost oz. nujnost, ki je "zahtevana" pri C/C++ (in manjka pri npr. Javi) sem se potem že z dolgčasa : Ok, če že imam povsod : "var ime_spremenljivke;" pa dajmo še tukaj "var i; i< ...". In for zanka zgleda takole:



for(var i = 0; i <childNodes.length; i++)



Spomnim se, da sem enkrat bral; da se spremenljivka "loči" po načinu kako se shrani glede na to, ali je zapisana z var, ali brez njega. Pa sem si mislil: pa ne mi rečt, da je to to. Shranim in stisnem F5 na brskalniku (osvežim stran).

Dela. Je prišel do zadnjega - brez problemov. V tem trenutku, sem se počutil vesel: da sem rešil to nadlogo; neumno: da je tako neumna stvar porabila toliko mojega časa. Saj to ne mora biti res, a je.

To je to: torej POZOR! JE razlika med "var i = 0;" in "i = 0;"

P.S.: Stran mi je čisto razmetalo ... :( - to pa mi ni všeč!

Ni komentarjev: