Objekt-problem i forbindelse med load af XML
Til de snuJeg er igang med at lave en Flashmenu, som dynamisk genererer menupunkter og undermenupunkter ud fra en XML-streng sendt fra ASP. Koden er fra en komponent som jeg har tilpasset og alt dette virker upåklageligt. Nu vil jeg gerne sikre mig at XML-strengen bliver loadet korrekt, og hvis den ikke gør dette, vil jeg have muligheden for at hente et andet , statisk XML-dokument, ligeledes fra serveren. Problemet er at jeg på eventen "onLoad" (som koden ser ud nu), kalder en funktion som udskriver menuen:
//get the data
this.menu = new XML();
this.menu.ignoreWhite = true;
this.menu.timeline = this;
this.menu.hostTimeline = this._parent;
this.menu.onLoad = this.makemenu;
//her kaldes den omtalte funktion
this.menu.load(URL);
};
//setup for movieclip/component recursion
RXMLmenu.prototype.makemenu = function() {
trace("makemenu...");
this.timeline.siblings = [];
this.inObj = new Object();
this.inObj.fontColor = this.timeline.fontColor;
this.inObj.fontSubColor = this.timeline.fontSubColor;
this.inObj.emb_f = this.timeline.emb_f;
this.inObj.buttonFont = this.timeline.buttonFont;
this.inObj.buttonFontSize = this.timeline.buttonFontSize;
this.inObj.buttonSubFont = this.timeline.buttonSubFont;
this.inObj.buttonSubFontSize = this.timeline.buttonSubFontSize;
this.inObj.w = this.timeline.w;
this.inObj.h = this.timeline.h;
this.inObj.ind = this.timeline.ind;
this.inObj.spacing = this.timeline.spacing;
this.inObj.nummer = this.timeline.nummer;
this.inObj.hostTimeline = this.hostTimeline;
this.inObj.menuChildCount = 0; // Counts number of childnodes
//if to display the document root as a single button
if (this.timeline.showRootNode) {
for (i=0; i<this.childNodes.length; i++) {
this.inObj.node = this.childNodes[i];
this.inObj.menustatus = this.childNodes[i].menustatus;
this.timeline.attachMovie("Xbutton", "root"+i, i, this.inObj);
this.timeline["root"+i]._y = i*(this.inObj.h+this.inObj.spacing);
this.inObj.menuChildCount++;
}
} else {
//else start with the children of the root
for (i=0; i<this.firstChild.childNodes.length; i++)
{
this.inObj.node = this.firstChild.childNodes[i];
this.inObj.menustatus = this.firstChild.childNodes[i].menustatus;
this.clip = this.timeline.attachMovie("Xbutton", "root"+i, i, this.inObj);
this.clip._y = i*(this.inObj.h+this.inObj.spacing);
this.timeline.siblings.push(this.clip);
}
}
// If Back != "" && null then visible
// links to prev page and menu
if (this.firstChild.attributes.backURL != "" && this.firstChild.attributes.backURL != null ){
backURL = this.firstChild.attributes.backURL;
btnBack._visible = true;
btnBack.onRelease = btnBack.goBack(backURL);
}
//define this array else recursion will fail
this.timeline.childclips = this.timeline.siblings;
// Open sub
if(mcMenu.activeMenu != ""){
mcMenu["root" add mcMenu.activeMenu].mc.onRollOver();
}
};
Jeg har prøvet at arbejde udenom at kalde makemenu-funtionen med this.menu.onLoad, bl.a. gennem at selv at definere onData:
this.menu.onData = function (src) {
if (src == undefined) {
this.onLoad(false);
} else {
this.parseXML(src);
this.loaded = true;
this.onLoad = ???this.makemenu???;
}
}
... men jeg ved ikke hvordan jeg kan referer tilbage til funktionen "makemenu" inde fra onData eventen...? Hvis der er nogen der har et forslag til hvordan dette kan gøres eller løses på en anden måde, er de meget velkommen til at skrive.
På forhånd tak
