PDA

Volledige versie bekijken : as1 -> as2 : xml


Sjeiti
%Europe/Berlin %549 %2005, 14:11
Ben maar weer eens aant proberen van as1 naar as2 te gaan... maar stuit op een aantal problemen.

Ik werkte altijd al met externe scripts en #include, en heelveel met prototyping om bestaande classes te extenden.
In een basis script dat ik include stond bijvoorbeeld iets om recursief door xml heen te fietsen:
Object.prototype.get = function(sNode, iDepth, lReturn) { etc...
...zodat in je bij een xml node alleen hoefde te zeggen: aDiv = xHtml.get("div");

Maar blijkbaar kan dat met actionscript 2 niet meer... (?)
Ik heb dus geprobeerd een XML2 class te maken die XML extend. Het wil zichzelf alleen niet aanroepen. Mischien heeft het met het casten van xNode naar XML2 te maken... ik weet het niet... feit is dat xNode.get(sName,iDepth,aReturn) het gewoon niet doet (ook al krijg ik geen errors).


class nl.shapers.XML2 extends XML {
function get(sName:String, iDepth:Number, aReturn:Array):Array {
if (iDepth==null) iDepth = -1;
if (aReturn==null) aReturn = new Array();
if (iDepth!=0) iDepth--;
for (var i=0;i<this.childNodes.length;i++) {
var xNode:XML2 = this.childNodes[i];
if (xNode.nodeName==sName) aReturn.push(xNode);
if (xNode.childNodes.length!=0&&iDepth!=0) aReturn = xNode.get(sName,iDepth,aReturn);
}
return aReturn;
}
}

Roenes
%Europe/Berlin %619 %2005, 15:51
trace eens this. En trace ook eens i in je for. Want ik denk dat er een foutje zit in het gebruik van this in dit geval. Dit weet ik echter niet zeker :)

Sjeiti
%Europe/Berlin %347 %2005, 09:20
Ik zou hier natuurlijk niet posten als ik alles niet al intensief getraced had.
Die 'this' is gewoon de reference naar de xml (XML2 extends XML). De nodeName van de gecaste xNode klopt, na een repeat loop is het: null, null, html. Die eeste twee nullen kloppen want dat zijn de xml- en doctype-declaration van de xhtml. De html node heeft een childNodes.length van 5, maar verder gaat het niet... het aanroepen van zichzelf (= xNode.get(nodeName) ) gaat dus niet goed.

Dauntless
%Europe/Berlin %647 %2005, 16:31
"Ik zou hier natuurlijk niet posten als ik alles niet al intensief getraced had."
Er zijn er wel niet echt véél die zo denken :p.

Maar uhm, de xml class is niet dynamisch hé. Als je hem wil extenden moet je hem eerst dynamisch maken :).

Sjeiti
%Europe/Berlin %481 %2005, 12:32
Dynamic ervoor plempem helpt niks.
Maar waarom zou het dynamic moeten zijn? Ik hoef niet on-the-fly methods of properties toe te voegen. Bovendien looped het de eerste keer gewoon door de childnodes van de xml heen, dus het werkt. (toch?)

Zou het er mee te maken kunnen hebben dat de core class XML niet dynamic is (Movieclip en Array bijvoorbeeld wel). Maarja... dan nog... waarom werkt het de eerste keer wel, maar kan het zichzelf daarna (op een gecaste childnode) niet aanroepen?

Dauntless
%Europe/Berlin %643 %2005, 16:26
Ahja, als je ze extend moesten ze niet dynamic zijn zeker? :# My bad

Flasher
%Europe/Berlin %650 %2005, 16:36
Volgens mij is het zo dat als je variabelen non-strict typet, dat ze dan sowieso dynamic zijn. Ik heb het ff getest met een prototype, en als je daarbij de :XML weglaat werkt hij prima, met :XML -> compile errors