Показать сообщение отдельно
Старый 11.11.2006, 03:10
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 1  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
По умолчанию createClassObject, destroyObject и TextInput - проблемы с удалением компонента

Вот, пытался написать пример для пользователя, создавшего тему http://flasher.ru/forum/showthread.php?t=87732 и наткнулся на нехорошую проблему.
Вот код:
Код:
import mx.controls.Label;
import mx.controls.TextInput;

var createLabelsButtonClipName:String = "createLabelsButton";
var createLabelsButtonLeft:Number = 10;
var createLabelsButtonTop:Number = 10;
var createLabelsButtonColor:Number = 0xffff00;
var createLabelsButtonSize:Number = 60;

var labelsBaseName:String = "myLabel";
var labelsNumber:Number = 10;
var labelsInterval:Number = 20;
var labelsLeft:Number = 100;
var labelsTop:Number = 100;
var labelsBaseText:String = "Lorem Ipsum ";

var textInputsSuffix:String = "TextInput";

var myButton:MovieClip = createRectangleMovieClip(createLabelsButtonClipName, this, this.getNextHighestDepth(), createLabelsButtonLeft, createLabelsButtonTop, createLabelsButtonSize, createLabelsButtonSize, createLabelsButtonColor, 100);

myButton.onRelease = function()
{
	for (var index:Number = 0; index < labelsNumber; index ++)
	{
		var newLabelName:String = labelsBaseName + index;
		var newLabel:Label = this._parent.createClassObject(Label, newLabelName, this._parent.getNextHighestDepth());
		newLabel.autoSize = "left";
		newLabel.text = labelsBaseText + index;
		newLabel.useHandCursor = true;
		newLabel.move(labelsLeft, labelsTop + index * labelsInterval);
		newLabel.onRelease = function()
		{
			var newTextInputName:String = this._name + textInputsSuffix;
			var newTextInput:TextInput = this._parent.createClassObject(TextInput, newTextInputName, this._parent.getNextHighestDepth());
			newTextInput.text = this.text;
			newTextInput.move(this._x, this._y);
			newTextInput.setSize(this._width, this._height);
			destroyObject(this._name);
		};
	}
}

function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
	var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
	newClip.beginFill(newColor);
	newClip.moveTo(0, 0);
	newClip.lineTo(newWidth, 0);
	newClip.lineTo(newWidth, newHeight);
	newClip.lineTo(0, newHeight);
	newClip.lineTo(0, 0);
	newClip.endFill();
	newClip._x = newX;
	newClip._y = newY;
	newClip._alpha = newAlpha;
	return newClip;
}
В библиотеке компоненты Label и TextInput.

Но почему-то не удаляется метка с помощью строки
Код:
destroyObject(this._name);
Насколько я понял, в функцию нужно передавать имя экземпляра компонента. Почему не проходит такой вариант?
Исходник не прикрепляю, ибо из-за компонентов он не уместится в один архив, а два мне делать лень. ^_^

PS:
Ещё хотел спросить по поводу метода createClassObject. Везде встречал такой синтаксис:
Код:
componentInstance.createObject(linkageName, instanceName, depth, initObject)
Что такое componentInstance? Это мувиклип, в котором будет создан компонент? Или нет?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 11.11.2006 в 03:19.