PDA

Просмотр полной версии : Переменная перезаписывается в цикле


Юрис
08.06.2009, 20:25
Первый опыт работы с XML, посему не пинайте.
Проблема вот в чем, загружаем ХМЛ, разбираем по запчастям в массив. Затем строится своеобразное меню, так вот не могу догнать как же назначить пунктам меню ссылки из массива. Пытаюсь записать ее в переменную при прохождении цикла, а она перезаписывается. В общем проще показать код))) Вот он



var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.load("test.xml");
myXML.onLoad = function(success) {
if (success) {
createArray();
} else {
result_text.text = "Данные небыли загружены";
}
};



var list:Array = new Array();

function createArray() {
for (n=0; n<myXML.firstChild.childNodes.length; n++) {
var image = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
var name = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
list[n]=[[image],[name]];

}

createMenuList();

}

function createMenuList(){
var spacing:Number = 30;
for (var i=0;i<list.length;++i){

var picName:String = list[i][0]; //вот тут определяется искомая переменная.
var name1:String = "name_mc"+i+"_mc";
var y:Number = i*spacing;
list_mc.attachMovie("name_mc",name1,i);
list_mc[name1].temp = picName;
list_mc[name1]._y=y;

//А вот тут вот начинается самая засада. когда происходит передача переменной в функцию, она почемуто во всех кнопках оказывается одинаковая.
list_mc[name1].button_bt.onPress = function() {
showPicture(picName);
}

}

}


function showPicture (href){
test_txt.text = href; //Соответственно здесь и выводится результат.
}



Подозреваю что неверно работаю с переменной в цикле, но как правильно ума не приложу. Заранее спасибо.

stuff
08.06.2009, 21:43
определять переменные надо до цикла
а в цикле - использовать
и ещё
list_mc.createEmptyMovieClip(name1, this.getNextHighestDepth());
перед AttachMovie

Юрис
09.06.2009, 00:22
хех... не помогает. Все также перезаписывает...

dimarik
09.06.2009, 01:38
showPicture(list_mc[name1].temp);

А Вы любитель загадок =)

for (n=0; n<myXML.firstChild.childNodes.length; n++)
...
for (var i=0;i<list.length; ++i)

Юрис
09.06.2009, 10:12
А что тут не так? ))) сначала делаю массив из ХМЛ, потом разбираю этот массив...

showPicture(list_mc[name1].temp);
Результат тот же. Уже всю голову сломал.

dimarik
09.06.2009, 11:40
list[n]=[[image],[name]];
list[] - массив, элементами которого являются массивы [], в которых по два элемента, представляющих из себя массивы, в которых лежат по одному элементу image и name соостветственно.
Вы ничего не перемудрили?