PDA

Volledige versie bekijken : Probleempje met relatieve verwijzing, oplossing waarschijnlijk simpel...


Nubilosus
%Europe/Berlin %759 %2008, 19:12
Lieve mensen. Waarschijnlijk ben ik er gewoon te moe voor na de eerste week school maar ik kom hier even neit meer uit. Ik heb een XML document met de namen, ranken en id's van mijn members, die worden ten eerste geladen in een Data Grid component (dat gaat prima), die Data Grid heeft een change-listener (ook die werkt), en zodra er geklikt wordt op een entry in de Grid moet in de textvakken ernaast niet alleen de naam en de rnak geladen worden uit de Grid, maar ook enkele dingen uit het XML bestand (zoals de avatar), die niet in de Grid staan. Hoe dan ook, het verwijzen vanuit de listener naar de array geladen in de XML loader faalt. Mijn huidige code is dit:

theGrid.addColumn("id");
theGrid.addColumn("Name");
theGrid.addColumn("Level");
var x:XML = new XML();
x.ignoreWhite = true;

x.onLoad = function(success) {
var members:Array = this.firstChild.childNodes;
for(i=0;i<members.length;i++) {

var item_obj:Object = {Name:members[i].attributes.name, Level:members[i].attributes.level, id:members[i].attributes.id};
theGrid.addItem(item_obj);
}
}

x.load("../backbone/members.xml");

myGridListener = new Object();
myGridListener.change = function(eventObj) {
var eventSource = eventObj.target;
var theSelectedItem = eventSource.selectedItem;
var theSelectedItemId = theSelectedItem.id;
//Hier komt het grote probleem...
txt_name.text = x[members[theSelectedItem.id].attributes.name];
};
theGrid.addEventListener("change", myGridListener);
Het resultaat is dat txt_name welliswaar veranderd, maar in een mooie nietszeggende 'undefined'. Merk op dat de attributes.name wel bestaat, want de Grid heeft wel alle entries mooi op een rijtje staan. Welke domme beginnersfout maak ik in mijn verwijzing txt_name.text = x[members[theSelectedItem.id].attributes.name];?

Jan
%Europe/Berlin %908 %2008, 22:48
members bestaat helemaal niet binnen je xml object.
Je maakt trouwens die var aan binnen een functie (de xml.onLoad()) en dus zou je daarbuiten members nog niet kunnen opvragen.
Dus:
zet bovenaan je script:
var members:Array=new Array();
Verander deze regel in je onLoad:
var members:Array = this.firstChild.childNodes;
in:
members=this.firstChild.childNodes;
En dan kan je het later opvragen via:
//txt_name.text = x[members[theSelectedItem.id].attributes.name];
trace(members.toString());
txt_name.text = members[theSelectedItem.id].attributes.name;

Groeten,
Jan