PDA

Просмотр полной версии : Вставить компонент, имея String


kutuzov
27.01.2008, 13:19
Необходимо вставить во ViewStack 10 (100) компонентов, все компоненты имеют свое названия.
Вначале получаем xml с названием всех компонентов которые необходимо вставить

обычно так:
var comp:Peoples = new Peoples()
comp.id = "viewPeoples";
views.addChild(comp);
из этого сделать:
var str:String = "Peoples"
// что здесь писать чтоб из String получить компонент
comp.id = "viewPeoples";
views.addChild(comp);

etc
27.01.2008, 14:22
getDefinitionByName

kutuzov
27.01.2008, 17:01
прочитал темы, которые нашел в посике по слову getDefinitionByName

так работает:
// если в classname написать мой компонент Peoples который я хочу вставить, то уже на работает
// пишет ошибку Variable Peoples is not defined.
public var classname:String = "mx.controls.Button";
var ClassRef:Class = getDefinitionByName(classname) as Class;
var component:DisplayObject = new ClassRef();
addChild(component);

а если пробовать туже кнопку вставить во ViewStack а затем последний вставить на сцену, то уже не работает
// пишет ошибку
// Type Coercion failed: cannot convert mx.controls::Button@191b56d1 to mx.core.Container.
public var classname:String = "mx.controls.Button";
var ClassRef:Class = getDefinitionByName(classname) as Class;
var component:DisplayObject = new ClassRef();
var views:ViewStack = new ViewStack();
views.addChild(component);
addChild(views);

etc
27.01.2008, 21:28
Значит ViewStack не принимает в качестве детей кнопки. Только контейнеры.

kutuzov
27.01.2008, 22:08
Вставляем Button в Container, затем вставляем Container во ViewStack, все работает.

Но когда я пишу собственный компонент, который основан просто на Button, то приложение отказывается его вставлять куда либо, про ViewStack я вообще не говорю даже

ps test.swf и test-debug.swf удалены для уменьшения веса

etc
27.01.2008, 22:18
Ну так компонент должен быть вкомпилирован в проект. Если он ни разу не использовался и не упоминается, то он не будет вкомпилирован.