PDA

Просмотр полной версии : область видимости в функции onLoad


romulko
30.04.2007, 00:36
Добрый вечер, друзья.
Пожалуйста, помогите советом, что не так.
Суть - создаю календарь событий. Там будут 31 мувик (в зависимости от месяца – это будут мувики с текстом в середине, который обозначает номер дня) и 4 текстовых поля. Выгрузка текста из xml-дерева в текстовые поля при нажатии кнопки, обозначающая день месяца уже сделал.

Теперь надо сделать так, чтобы кнопка изменяла цвет номера дня в текстовом поле, если в атрибуте дескриптора xml будет соответственное значение – none, medium, hight.

То есть, логика такая – например, если 21 числа намечается важное событие, пользователем заносится в атрибут значение hight, и, во флешке автоматически на копке, обозначающая 21 число текст меняет цвет на красный. Если событие средней важности, заносится значение medium, и кнопка принимает тускло-красный цвет. Если ничего нема, то просто ставится none, и текст имеет стандартную окраску.

Проблема вот в чем – на мувике кнопки пишу инструкцию switch

onClipEvent (load) {
switch (_parent.rootNodes[1].attributes.importance) {
case "none" :
trace("lol");
case "medium" :
trace("lol");
case "hight" :
trace("lol");
}
}


Не работает потому, что не видит переменной rootNodes, которая, в свою очередь объявляется при загрузке xml –

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function() {
rootNodes = this.firstChild.childNodes;
};
xml.load("calendar.xml");


Пожалуйста, скажите, в чем ошибка?
Спасибо, что дочитали до конца….:)
Никак не получается написать краткое изложение проблемы… :quiet:

Kikasso
30.04.2007, 00:43
а слабо на xml.onLoad switch поставить?

romulko
30.04.2007, 00:49
Не понимаю логику реализации этой инструкции к каждой из 31 кнопок...

Kikasso, пожалуйста, напишите пару строк кода, чтобы я понял, что вы имеете в виду.

Kikasso
30.04.2007, 00:54
кто у вас раньше появляется - копки или xml? Я, похоже, недопонял.
Похоже что rootNodes объявляется внутри xml.
Если _parent это то что нужно, попробуйте так:
var rootNodes:Array;
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function() {
rootNodes = this.firstChild.childNodes;
};
xml.load("calendar.xml");
И не сажайте код на мувик кнопки, это тоже источник глюка.

romulko
30.04.2007, 01:01
Что значит свежий взгляд понимающего человека!

Спасибо, Kikasso, все заработало. :drinks:
Модернизировал код и все летает -

xml.onLoad = function(succes:Boolean) {
if (succes) {
_root.rootNodes = this.firstChild.childNodes;
gotoAndStop(2);
} else {
trace("fuck load xml");
}
};

Kikasso
30.04.2007, 01:05
только лучше
if ( succes && this.status == 0 ) { ... }
Проверка на валидность не помешает. И success, а то засмеют ))

etc
30.04.2007, 01:13
Только не «succes», а «success». Учите английский.

this.create
30.04.2007, 01:22
только лучше
if ( succes && this.status == 0 ) { ... } Проверка на валидность не помешает. И success, а то засмеют )) if (success && !this.status) {...} Преобразование в булев тип:
number - false если 0 или NaN, true во всех остальных случаях. Status только при корректном разборе 0, в остальных случаях не ноль( все ошибки отрицательные числа).

romulko
30.04.2007, 01:39
Проверка на валидность не помешает. И success, а то засмеют ))

Уже засмеяли....

Только не «succes», а «success». Учите английский.

Слушаю и повинуюсь, мой учитель :umnik2: .

У меня сейчас 2 часа ночи. Мне только надо было, чтобы код работал.
Хотел вообще вставить имя переменной, похожую на текст в инструкции else....

Всем спокойной ночи :bye:

:boredom:

Kikasso
30.04.2007, 03:18
Преобразование в булев тип
Это не преобразование. Преобразование - вот:
if ( (Boolean( this.status ).toString().length == 5 ) ? true : false ) trace ( "status ok" );

Проверять стоит, потому что некоторые серваки выдают кастомный error404 - success покажет true.

etc
30.04.2007, 10:43
if ( (Boolean( this.status ).toString().length == 5 ) ? true : false ) trace ( "status ok" );
Гы, даже индусы проверку попроще придумали :D