Просмотр полной версии : comboBox баг
rolling_tmp
07.06.2002, 13:14
new_combo = function (){
_root.createEmptyMovieClip("win",1);
_root.win._x = random (200);
_root.win._y = random (200);
_root.win.attachMovie("FComboBoxSymbol","lis", 1);
}
new_list = function (){
_root.createEmptyMovieClip("win",1);
_root.win._x = random (200);
_root.win._y = random (200);
_root.win.attachMovie("FListBoxSymbol","lis", 1);
}
функция с листом отрабатывает прекрасно
а вот функция с комбо отрабатывает только через раз
примеры здесь
sample swf - http://www.time-line.kz/test/combo_bug.swf
zipped fla - http://www.time-line.kz/test/combo_bug.zip
ктонибудь знает в чем дело?
забавно, что так все работает
new_combo = function (){
var a = _root.createEmptyMovieClip("win",1);
a._x = random (200);
a._y = random (200);
trace(a.attachMovie("FComboBoxSymbol","lis", 5));
}
rolling_tmp
07.06.2002, 15:51
да, так работает :)
интересная фичка, но почему?
предполагаю это что то с инициализацией класса.
создается ведь на то же место. а компоненты "рисуют" себя только через кадр от создания .... но тогда и мой вариант не должен работать,...
я вообще всегда работаю со ссылками... и я бы написал сразу мой вариант.
короче шаманство.
rolling_tmp
07.06.2002, 16:26
вопрос отсается в силе, так как предложеное решение не помогает в более сложных случаях. пример пока не могу привести, но постараюсь.
Nox Noctis
09.06.2002, 02:39
в действительности все не так, как на самом деле...
(народная мудрость)
а на самом деле до жути просто :)
...сразу перейдем к тому, как будет работать:
new_combo = function () {
delete _root.win.lis.onUnload;
_root.createEmptyMovieClip("win", 1);
_root.win._x = random(200);
_root.win._y = random(200);
_root.win.attachMovie("FComboBoxSymbol", "lis", 1);
};
улавливаете подставу ? :D :D
когда мы переписываем старый клип с комбой новым пустым клипом, то как раз и срабатывает обработчик onUnload...
...теперь берем пустой мув, кидаем на сцену компонент комбобокс, альт+ф3 -> MovieExplorer и вбиваем в строку поиска слово onUnload
что видим :
Scene 1
Symbol Definition(s)
ComboBox
actions for frame 1
#initclip 3
/*
FComboBoxClass
EXTENDS FScrollSelectListClass
This class manages a "pulldown" scrolling list.
*/
function FComboBoxClass() {
............. [skip]
............. [skip]
............. [skip]
this.onUnload = function()
{
this.superHolder.removeMovieClip();
}
............. [skip]
............. [skip]
............. [skip]
как грится - с приездом :)
проверяем то же самое для листа - онАнлоад не определяется, и следовательно все работает !..
выхода два:
– либо удалять онАнлоад перед новым аттачем (как в коде выше)
– либо более удобно:
1. идем в библиотеку->Flash UI Components->ComboBox
2. открываем клип и в верхнем слое "Actions : Class" находим слово "onUnload"
3. убиваем эту функцию
:)
...если б вы только знали, КАК я этот нашел :p ... пятнадцать минут полного извращения :p
rolling_tmp
10.06.2002, 17:52
попробую удалить как советует уважаемый Nox Noctis.
на самом деле круто раскопал!!!!
я тоже до Анлоада дошел, но я попробовал затрейсить тело функции, теперь попробую удалить саму функцию.
ну так зачем макромедиа все это намутили?
rolling_tmp
13.06.2002, 11:14
удаление unload решило все проблемы, combo заработал корректно.
ктонибудь может обюъяснить зачем они ее вставили ?
Nox Noctis
13.06.2002, 18:16
почитай объявление класса FComboBoxClass...
там есть такое:
_global._popUpLevel = (_global._popUpLevel==undefined) ? 20000 : _global._popUpLevel+1;
// Testing for _root's existence?
this.superHolder = _root.createEmptyMovieClip("superHolder" + _popUpLevel, _popUpLevel);
то есть проверяется на какую глубину можно положить суперХолдер, и клип суперХолдер создается в руте... значит чтобы его убить, когда комбобокс исчезнет из таймлайна, нужно отдельное действие, которое и реализуется онАнлоадом.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.