![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
На вход метода подаётся строковое название класса, нужно вернуть объект данного класса, как это можно сделать?
|
|
|||||
|
Если заранее известны предолагаемые классы которые ты можешь вернуть этим методом, то банальный switch:
|
|
|||||
|
4AM Games
|
В Flash 8 есть класс mx.utils.ClassFinder
юзать так
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Цитата:
я когда делал фабрику мне оч как не хватало такой вещицы... так как eval() не совсем так работает как например в том же php.. ну что поделать.. как грится пользуйтесь поиском по хелп )
__________________
Feсi quod potui, faciant meliora potentes |
|
|||||
|
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
import mx.utils.ClassFinder;
// метод один
var lConstructor1:Function = ClassFinder.findClass ('mx.controls.List');
var c:MovieClip = createClassObject (lConstructor1, 'listView1', 1);
c.dataProvider = ['sdfsdfsd', 'sdfsdfsdf', 'sdfsdfsdfsd', 'sdfsdf'];
c.setSize (100, 100);
c.move (0, 0);
// метод два
function getClassByName (path:String):Function {
return Function (eval ('_global.' + path));
}
var lConstructor2:Function = getClassByName ('mx.controls.List');
var d:MovieClip = createClassObject (lConstructor2, 'listView2', 2);
d.dataProvider = ['sdfsdfsd', 'sdfsdfsdf', 'sdfsdfsdfsd', 'sdfsdf'];
d.setSize (100, 100);
d.move (0, 101);
|
|
|||||
|
Регистрация: Jun 2006
Сообщений: 5
|
Самый короткий метод: добавь объект в стейдж затем удаляй.
Потом пиши - я показываю на примере Button createClassObject(mx.controls.Button, "m_btn",this.getNextHighestDepth())соответственно ты можешь создать и другой объект, например TextInput и т.д. |
|
|||||
|
4AM Games
|
Цитата:
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^ |
|
|||||
|
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Первый вариант, который мне пришёл в голову, создать пустой мувиклип в библиотеке, сделать линкейдж на класс, имя будет передаваться в фабрику, а она аттачит класс и возвращает объект. Но это ерунда какая-то, получается для каждого нового класса нужно создавать мувиклип, вообщем это подход через заднее место. Нужно было нечто, типа класса Class в Java, иначе нормальной фабрики не получится.
Вообщем Nirth просто зажёг, за что ему большое спасибо!!! Один вопрос меня терзает фигли разработчики в документацию по 8-ке не включили описание пакета mx.utils ?? |
|
|||||
|
а чем тебе фабрика не нравится ? зачем клипы отдельные ?
у меня фабрика работает с 50-штк классов и ничего ) а вот то что дал Nirth просто даст мне возможность щаз там нафик убрать гигантский свич )
__________________
Feсi quod potui, faciant meliora potentes |
|
|||||
|
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Да нет - свитч, как то мне совсем не нравится. Смотри, допустим стороний разроботчик расширяет систему. Ему проще дать интерфейс, который он должен реализовать и всё. А так ему ещё нужно залезть в свитч и дописать свой класс.
Кстати посмотрите реализацию classFinder. class mx.utils.ClassFinder
{
/**
Find a class constructor by it's name.
@param fullClassName String containing the name of the class to be searched.
@return Function Constructor for the class.
*/
public static function findClass(fullClassName : String) : Function
{
if (fullClassName == null) return null;
var result = _global;
var tokens = fullClassName.split(".");
for (var i = 0; i < tokens.length; i++)
{
result = result[tokens[i]];
}
if (result == null)
{
_global.__dataLogger.logData(null, "Could not find class '<classname>'",
{classname: fullClassName}, mx.data.binding.Log.BRIEF);
}
return result;
}
}
Другими словами класс должен засветится во флеше хотябы в составе пакета. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|