PDA

Просмотр полной версии : childNodes.length troubles


amphetamine
11.12.2005, 22:44
xm = new XML();
...
xm.load("menu1.xml");
...
am[i].xx = new XML (xm.firstChild.childNodes[i].childNodes);
...

далее есть поцедурка

RollOver = function (n) {
with (n) {
trace(xx.childNodes.length);
};
};

xx.childNodes.length показывает неверное число нод
если сделать trace каждой ноде то будет видно, что через одну идут ноды содержащие просто "," хотя в исходной xml такого нету

в чем моя проблема ?
заранее спасибо

Antares
11.12.2005, 23:42
ignoreWhite = true

amphetamine
12.12.2005, 01:35
ignoreWhite = true
cтоит true, как ни странно
прилепил исходник + xml файл если я непонятно изложил суть проблемы

Antares
12.12.2005, 01:50
:)))))))))))))))))))))))))))))
Ты массив выводишь:)))))))))))))))))))))

Antares
12.12.2005, 01:56
loadXML = function(xmlName) {
xm.load("menu1.xml");
xm.ignoreWhite = true;
xm.onLoad = function (loaded) {
if (loaded) {
for (i=0; i <= xm.firstChild.childNodes.length-1; i++) {
am[i] = _root.me.attachMovie("item","it"+i,getNextHighestDepth(),{_x:0, _y:mainbut._height + i*20, sel:_sel,xx:asd});
am[i].title.text = xm.firstChild.childNodes[i].attributes.name;
am[i].xx = new XML (xm.firstChild.childNodes[i].childNodes);
am[i].xx.ignoreWhite = true;
if (am[i].xx.hasChildNodes() == false) {am[i].arr._visible = false;};
};
};
};
};


Что неверно -- обработчик надо определять ДО загрузки. ДО, а не после!!

Про класс XML (http://novemberain.com/livedocs/Help/ActionScriptLangRef/00001882.html) и XMLNode (http://novemberain.com/livedocs/Help/ActionScriptLangRef/00001916.htmll) читать в обязательном порядке. Убрать нахрен точки с запятой после закрывающих фигурных скобок.

amphetamine
12.12.2005, 19:21
из объяснений и чтения хелпа, я так и не понял, почему у меня неправильно оперделяется длина массива(дочених нод), если тебе не трудно прокомментируй пожалуйста по подробнее в чем состоит моя ошибка..
читал про классы, точки с запятой теперь не ставлю=)

amphetamine
12.12.2005, 19:35
если посмотреть в debug/list variables
то при передаче хмл

Variable _level0.me.xm = [object #1] {

<m>
<k0 name="2New Project">
<k1 name="Shop">
<k2 name="shop1" link="" />
<k2 name="shop2" link="" />
<k2 name="shop3" link="" />
<k2 name="shop4">
<k3 name="a" link="" />
<k3 name="b" link="" />
<k3 name="c" link="" />
</k2>
</k1>
<k1 name="Prtfolio">
<k2 name="p1" link="" />
<k2 name="p2" link="" />
</k1>
<k1 name="HomePage">
<k2 name="HP1" link="" />
<k2 name="HP2" link="" />
</k1>
</k0>
<k0 name="Save Project" link="" />
<k0 name="Load saved Project" link="" />
<k0 name="About" link="" />
</m>
}

при передаче части хмл-ки появляются запятые

Variable _level0.me.it0.xx = [object #7] {

<k1 name="Shop">
<k2 name="shop1" link="" />
<k2 name="shop2" link="" />
<k2 name="shop3" link="" />
<k2 name="shop4">
<k3 name="a" link="" />
<k3 name="b" link="" />
<k3 name="c" link="" />
</k2>
</k1>
,
<k1 name="Prtfolio">
<k2 name="p1" link="" />
<k2 name="p2" link="" />
</k1>
,
<k1 name="HomePage">
<k2 name="HP1" link="" />
<k2 name="HP2" link="" />
</k1>
}



и неправильно определяется childNode.length
вопрос в том, что я неправильно делаю...
исходник прилагается

s_u_m_p
12.12.2005, 19:45
Что неверно -- обработчик надо определять ДО загрузки. ДО, а не после!!


Честно говоря во флэше глубоко пофигу где писать обработчик (до команды лоад или строкой после, главное в том же блоке), так как он полюбому запуститься только после того как очиститься стэк функций.

Antares
12.12.2005, 20:50
Честно говоря во флэше глубоко пофигу где писать обработчик (до команды лоад или строкой после, главное в том же блоке), так как он полюбому запуститься только после того как очиститься стэк функций.
Аха. Вот такие вот начитанные миллиард раз задавали вопросы "почему у меня лишние undefined вылазят при загрузке", а также "почему звук после загрузки не проигрывается".

s_u_m_p
12.12.2005, 21:09
Аха. Вот такие вот начитанные миллиард раз задавали вопросы "почему у меня лишние undefined вылазят при загрузке", а также "почему звук после загрузки не проигрывается".

Тогда поясню менее начитанным:

* Загрузка во флэш асинхронная?
* Сколько исполняющихся потоков кода?
* Что из себя фактически представляет скрипт написанный в кадре?

так как потоков всего один, и код на кадре фактически безымянная функция, то даже если загрузка произошла в тот же самый момент (хотя и это не возможно, спроси у Нокса он тебе подробно объяснит) когда была команда лоад, обработчик запуститься после того как выгрузиться эта безымянная функция

то бишь, если так написать, будет работать всегда
var lv:LoadVars = new LoadVars ();
lv.load ('text.txt');
lv.onLoad = function () {}

З.Ы. кстати по той же причине сетИнтервал работает не так точно как хотелось бы