PDA

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


don_Lino
18.01.2010, 14:36
Начинаю изучать Flex b AS и возникла такая проблемкаmxml не видит класс который находится в as файле.
Создаю проэкт, в проэкте 2 файла: trainingProject.mxml и myClass.as, их содержание выложил ниже
trainingProject.mxml :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import modifyDG;

private function init():void
{
var btn:modifyDG = new modifyDG();
}
]]>
</mx:Script>
</mx:Application>

myClass.as :

package
{
import mx.core.UIComponent;

public class myClass extends UIComponent
{
public function myClass()
{
var button:Button = new Button();
this.addChild(button);

}
}
}

в результате должна быть отображена кнопка, также если бы я написал:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[

private function init():void
{
var button:Button = new Button();
this.addChild(button);
}
]]>
</mx:Script>
</mx:Application>

делал и по-другому
trainingProject.mxml :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:myComp="myComponents.*">

<myComp:myClass />

</mx:Application>

myClass.as :

package myComponents
{
import mx.core.UIComponent;

public class myClass extends UIComponent
{
public function myClass()
{
button.label("i am a button");
}
}
}

выдает ошибку:
Severity and Description Path Resource Location Creation Time Id
Could not resolve <myComp:myClass> to a component implementation. trainingProject/src trainingProject.mxml Unknown 1263809815075 1110

Подскажите, что неправильно делаю и какая запиь будет лучше?? :o

Svi_stok
18.01.2010, 22:35
не совсем понятно, что вы хотите сделать?

don_Lino
19.01.2010, 00:21
Вообще-то цель стоит создать интерфейс динамичесски, при помощи actionscript 3

Fergus
19.01.2010, 13:01
Во-первых, расширять УИКомпонент не так просто, как, например, MovieClip. Добавлять детей в него нужно, перекрывая его защищенную функцию. И он сам решит когда их добавлять.
Во-вторых, вот это: var btn:modifyDG = new modifyDG(); не добавляет кнопку в дисплейЛист. Это только создает объект в памяти и ставит на него указатель. Чтоб кнопка добавилась в дисплейЛист, надо тоже сделать addChild().

don_Lino
19.01.2010, 15:43
да, в public function myClass() делал addChild(), объект тоже не отображается..=(

BeDLiNt
19.01.2010, 15:53
Всё работает. Задайте размеры кнопки, вы её просто не видите (1x1px):
package
{
import mx.controls.Button;
import mx.core.UIComponent;

public class MyClass extends UIComponent
{
public function MyClass()
{
var button:Button = new Button();
button.width = 100;
button.height = 100;
this.addChild(button);
}
}
}

don_Lino
19.01.2010, 17:32
В том то и дело, если это пишу в самом теле mxml, то все работает, а если делаю это через класс в actionscrip, не выходит. Да, и размеры не обязательно задавать, он по умолчанию рисует кнопку минимального размера. Тут дело в классе, или не правильно обращаюсь, или объявляю, но компилятор не указывает об ошибках.

BeDLiNt
19.01.2010, 17:51
don_Lino: Ну наследуйтесь не от UIComponent, зачем мучаться. Наследуйтесь там от канваса допустим, если хотите чтоб заработало как вы хотите просто.
package
{
import mx.containers.Canvas;
import mx.controls.Button;

public class MyCanvas extends Canvas
{
public function MyCanvas()
{
var button:Button = new Button();
this.addChild(button);
}
}
}

don_Lino
19.01.2010, 18:36
увы, но не проходит фокус.. =( думаю дальше..

BeDLiNt
19.01.2010, 18:42
увы, но не проходит фокус.. =( думаю дальше..
Как не проходит?) Всё работает, сам попробовал.

don_Lino
19.01.2010, 19:18
Спасибо большое! Наверное у меня проблема с Flex Builder, буду выяснять о_О

Добавлено через 5 часов 47 минут
Все! Вроде разобрался. Толи Builder глючил, то ли я. =)
вобшем привожу рабочий код
mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
<![CDATA[
import modifyDG;
public function init():void
{
var btn1:modifyDG = new modifyDG();
addChild(btn1);
}
]]>
</mx:Script>
</mx:Application>
AS3:
package
{
import mx.collections.*;
import mx.controls.*;
import mx.controls.advancedDataGridClasses.*;
import mx.core.UIComponent;

public class modifyDG extends UIComponent
{
public function modifyDG():void
{
var btn:Button = new Button();
btn.width = 100;
btn.height = 100;
this.addChild(btn);

}

}
}
Всем откликнувшимся спасибо, тема закрыта.

BeDLiNt
20.01.2010, 08:48
don_Lino: Только классы надо называть с заглавной буквы: ModifyDG.

don_Lino
20.01.2010, 14:32
Эмм.. Ну да))))