Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.11.2006, 01:33
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 1  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
Question как удалить TextInput при focusOut - получаю критическую ошибку

есть такой извратный кусок кода класса-потомка MovieClip, вызывающий критическую ошибку плеера:
Код:
import mx.utils.Delegate;
iLab = createClassObject(Label,"iLab"+depth, depth, {_x:0, _y:0, text:"12", autoSize:"left", visible:true});
		iLab.onRelease = function(){			
			this.visible = false;
			var iEdit:TextInput = _parent.createClassObject(TextInput,"iEdit"+depth+1, depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});
			var destr:Function = Delegate.create(this, edLab);
			function remm(){
				destr(iEdit);
			}
			iEdit.addEventListener("focusOut", remm); //при наступлении этого события
 //происходит ошибка вырубающая флешовый плеер, 
 //насколько я понял объект вызвавший неродное событие таким образом грохнуть нельзя
 //мув при onRelease можно удалить			
		}
		function edLab(edit:TextInput){
			this.visible = true;//depth был неправильный
			this.text = edit.text;
			edit._parent.destroyObject(edit._name);
		}
конечно можно удалять етот iEdit onRelease другого клипа, но так поступать нехочется, дабы не жертвовать универсальностью кода и гимора это принесет немало(чую обратной стороной стула), можно оставить как есть: edit.visible=false, но для чистоты эксперемента охота его всетаки удалить...
дык, товарищи флешеры:
1: в чем я неправ удаляя так объект,
2: может есть другое решение,
3: и в чем причина критической ошибки плеера(понимаю, что в моем коде, а именно -...)?
заранее дьякую, и извеняйте за объемность вопроса


Последний раз редактировалось dacino; 24.11.2006 в 11:11.
Старый 24.11.2006, 02:29
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
dacino, как ты думаешь, если я вставлю твой код для проверки, у меня будет что-то работать? Судя по написанному, стоит для начала понять, что делает Delegate, EventDispatcher, что такое методы, конструктор супер-класса и прочее. Пока видно только то, что знания есть только обрывками и всё свалено в кучу.

Вердикт: переписать должным образом.

Старый 24.11.2006, 11:14
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 3  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
__etc - внимая вашему вердикту переписал вопрос, чтоб код работал, требо чтоб в либаре были Label и TextInput, соответственно

Старый 24.11.2006, 13:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Не работает:
Код:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: The class or interface 'TextInput' could not be loaded.
     			var iEdit:TextInput = _parent.createClassObject(TextInput,"iEdit"+depth+1, depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 15: The class or interface 'TextInput' could not be loaded.
     		function edLab(edit:TextInput){

Total ActionScript Errors: 2 	 Reported Errors: 2

Старый 24.11.2006, 14:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код:
depth = 0;
iLab = createClassObject(mx.controls.Label, "iLab"+depth, depth, {_x:0, _y:0, text:"12", autoSize:"left", visible:true});
iLab.onRelease = function() {
	this.visible = false;
	this.iEdit = this._parent.createClassObject(mx.controls.TextInput, "iEdit"+(depth+1), depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});
	this.iEdit.text = this.text;
	this.iEdit.addEventListener("focusOut", mx.utils.Delegate.create(this,this.onEditComplete));
};
iLab.onEditComplete = function() {
	if (this.iEdit.text!=undefined) {
		this.text = this.iEdit.text;
		this._parent.destroyObject(this.iEdit._name);
		this.visible = true;
	}
}

Старый 24.11.2006, 17:01
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 6  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
сто раз сорри, вырванный код не работает, вот архив с исходником, и классом delegate, если у кого нет mx.utils.delegate, в либеру проекта положите TextInput и Label, как сделать грамотное удаление TextInput, при focusOut не представляю, хотя очень интересно...


Последний раз редактировалось dacino; 05.01.2007 в 17:37.
Старый 24.11.2006, 17:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
dacino, посмотри пост #5, там всё прекрасно работает.

Старый 24.11.2006, 17:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
И ещё, замени свой McFactory на этот:
Код:
/**
 * @author Denis Kolyako
 */
class ru.etcs.McFactory {
	
    public static function create (this_mc:MovieClip, name:String, depth:Number, init_obj:Object, current_constructor:Function):MovieClip {
        var new_mc:MovieClip = this_mc.createEmptyMovieClip(name, depth);
        new_mc.__proto__ =  current_constructor.prototype;
        for (var i:String in init_obj) {
                new_mc[i] = init_obj[i];
        }
        current_constructor.call(new_mc);
        return new_mc;
    }
}
У тебя с ошибкой просто.

Старый 24.11.2006, 17:25
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 9  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
__etc - как хорошо, что у некоторых людей есть практически телепатические способности, мои вам благодарности...

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.