PDA

Просмотр полной версии : проблема с removeMovieClip


sylk
28.07.2009, 14:53
после того как отрабатывает remove(), MovieClip "dates" не удаляется, а удаляется он только после завершения cbListener.change = function(evt_obj:Object).

// Create dateChoose ComboBox
this.createClassObject(mx.controls.ComboBox,"dateChoose",this.getNextHighestDepth(),{_y:10, _x:120});
dateChoose.addItem("Hoy");
dateChoose.addItem("Dia");
dateChoose.addItem("Period");
// Create container:MovieClip for Dates
var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
// Create listener object.
var cbListener:Object = new Object();
var dfFListener:Object = new Object();
var dfTListener:Object = new Object();
// dateChoose.change
cbListener.change = function(evt_obj:Object) {
var depth:Number = dates.getDepth();
remove();
// Add dfF and dfT to duplicated MovieClip "dates"
if (dateChoose.value == "Dia") {
duplicateDates();
dates.createClassObject(mx.controls.DateField,"dfF",0,{_x:0});
dates._x = 120;
dates._y = 50;
// Add listener objects to dfF DateField
dates.dfF.addEventListener("change",dfFListener);
}
if (dateChoose.value == "Period") {
duplicateDates();
dates.createClassObject(mx.controls.DateField,"dfF",0,{_x:0});
dates.createClassObject(mx.controls.DateField,"dfT",1,{_x:110});
dates._x = 60;
dates._y = 50;
// Add listener objects to dfF and dfT DateFields
dates.dfF.addEventListener("change",dfFListener);
dates.dfT.addEventListener("change",dfTListener);
}
};
// dates.dfF.change
dfFListener.change = function(evt_obj:Object) {
trace(dates.dfF.selectedDate);
};
// dates.dfT.change
dfTListener.change = function(evt_obj:Object) {
trace(dates.dfT.selectedDate);
};
// Add listener object to dateChoose ComboBox
dateChoose.addEventListener("change",cbListener);

function remove() {
removeMovieClip(this._parent.dates);
}
function duplicateDates() {
var duplicate:MovieClip;
duplicate = this.container.duplicateMovieClip("dates", this.getNextHighestDepth(), {_y:50});
}


что не так?

и ещё один вопрос! как сделать так, чтобы ComboBox был сверху MovieClip "dates"???

Xero201
28.07.2009, 23:24
Загляни в хэлп (ActionScript classes > MovieClip > removeMovieClip (MovieClip.removeMovieClip method)
Там что-то говорится про удаление клипов, содержащих компоненты.
Может поможет, а может и нет.

KiL33
29.07.2009, 05:45
При расположении компонентов в проекте строка this.getNextHighestDepth() поднимает ваши мувики за предельный уровень, с которого removeMovieClip не может удалять.

aksios
29.07.2009, 10:20
после того как отрабатывает remove()
А где это в коде?

KiL33
29.07.2009, 10:26
видимо здесь
function remove() {
removeMovieClip(this._parent.dates);
}

aksios
29.07.2009, 10:53
Она "не отрабатывает", поскольку только декларация–можно отрейсить.
А вот если поправить:
remove();
function remove():Void {....
- Вот так функция будет выполняться.

KiL33
29.07.2009, 10:59
в любом случае removeMovieClip будет молчать.

aksios
29.07.2009, 11:08
Из чего это следует?

KiL33
29.07.2009, 11:11
ну во-первых
// Create dateChoose ComboBox
во вторых
duplicate = this.container.duplicateMovieClip("dates", this.getNextHighestDepth(), {_y:50});

aksios
29.07.2009, 11:23
Первое к теме не относиться, второе - там новое имя пропущено, а так не вижу проблем. Если автор пишет, что удаляется, значит, удаляется. другое дело, что сама по себе функция remove() не вызывается. По моему, об этом и был вопрос.

KiL33
29.07.2009, 11:32
Первое и второе на результат действуют в совокупи обоих факторов.
Не мне вам объяснять, что при размещении компонентов использовать getNextHighestDepth при дублировании мувиков не есть правильно.

sylk
29.07.2009, 16:51
хм! если она не отрабатывала, то и удалятся ничего не должно! разве не так???

Добавлено через 55 секунд
а как правильно???

Добавлено через 17 минут
по моему, проблемма в другом! проблемма в DateField. потому как если написать что-то такое:

//Create textinput and button instances
createClassObject(mx.controls.DateField, "my_df", 1, {_x: 100, _y:100});
createClassObject(mx.controls.Button, "my_button", 2, {label:"My Button"});
//Shift button to be below text input
my_button.move(my_ti.left, Stage.height - my_ti.bottom);

//Create Listener Object for button click
var buttonListener:Object = new Object();
buttonListener.click = function(evt_obj:Object){
destroyObject("my_df");
createClassObject(mx.controls.DateField, "my_df", 1, {_x: 100, _y:90});
}
//Add Listener
my_button.addEventListener("click", buttonListener);


опять та же проблемма с DestroyObject, а если заменить DateField на ComboBox, то всё ОК!!! и тогда возникает другой вопрос! как удалить DateField???

aksios
29.07.2009, 17:12
sylk, код у Вас кривой, просто лучше перепишите почитав еще про компоненты.

sylk
29.07.2009, 17:27
этот код вообще не мой! он взят из HELP!!! там он просто для ComboBox!

Добавлено через 41 минуту
я нашёл ответ на английском сайте! на удаление таких Component как DateField и ComboBox требутся 1 кадр! так что нужно просто добавить

onEnterFrame = function() {
createClassObject(...);
delete onEventFrame;

Xero201
29.07.2009, 22:03
Раз уж так активно пошла речь об удалении компонентов, то, возможно, кого-нибудь заинересует и вот эта тема http://www.flasher.ru/forum/showthread.php?t=127972, я там тож активно пытаюсь удалить ComboBox, и даже успешно, но метод, которым этого добиваюсь все равно смущает. Может подскажите как сделать красиво

sylk
30.07.2009, 02:43
теперь все хорошо удаляется и заного создаётся, но появилась ещё одна проблеммка! и это печально :(
причём она есть только когда я делаю Test Movie, когда же я делаю Debug Movie всё работает нормально!

//Create textinput and button instances
createClassObject(mx.controls.DateField,"my_df",1,{_x:100, _y:100});
createClassObject(mx.controls.Button,"my_button",2,{label:"My Button"});
//Shift button to be below text input
my_button.move(my_ti.left,Stage.height-my_ti.bottom);

//Create Listener Object for button click
var buttonListener:Object = new Object();
buttonListener.click = function(evt_obj:Object) {
destroyObject("my_df");
onEnterFrame = function () {
createClassObject(mx.controls.DateField,"my_df",1,{_x:100, _y:90});
my_df.disabledRanges = [{rangeEnd:new Date(2009, 6, 29)}];
delete onEnterFrame;
};
};
//Add Listener
my_button.addEventListener("click",buttonListener);

а проблемма состоит в том, что в созданном DateField в Test Movie не делается disabledRanges. как побороть вот это???